了解しました。次のようなxmlドキュメントがあります。
<xml>
<list>
<partner>
<name>Some Name</name>
<status>active</status>
<id>0</id>
</partner>
<partner>
<name>Another Name</name>
<status>active</status>
<id>1</id>
</partner>
</list>
</xml>
私はそれを解析するためにrubyのlib-xmlを使用しています。「SomeName」という名前のパートナーがいるかどうかをすばやくルビーな慣用的な方法で見つけたいと思います。
document ..という名前の変数でドキュメントを解析したと仮定して、これを1行またはルビーコードで行うにはどうすればよいですか。document.find(xpath)を呼び出してノードを取得できます。私はこれをわずかに異なるシナリオで複数回行う必要があり、今では私を悩ませ始めています。
私は次のことができることを知っています(しかしその醜い)
found = false
document.find('//partner/name').each do |name|
if (name.content == 'Some Name')
found = true
break
end
end
assert(found, "Some Name should have been found")
しかし、これは本当に醜いです。列挙インクルードを使用することを考えましたか?ミックスインメソッドですが、実際のノードではなく各ノードの.contentフィールドを取得する必要があるため、それでも機能しません...これを書いている間、私はこれを考えました(ただし、エレガントではありますが、多少非効率に見えます)
found = document.find('//partner/name').collect{|name| name.content}.member?("Some Name")
これを行う他の方法はありますか?