好吧,我有一個XML文檔看起來是這樣的:遍歷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>
我使用紅寶石的lib-XML解析它。 我想以快速和紅寶石的慣用方式找到名稱爲「Some Name」的合作伙伴。
如何在一行或者ruby代碼中做到這一點,假設我有一個在名爲document的變量中解析的文檔..這樣我就可以調用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")
,但我覺得這很醜陋。我想過使用枚舉包括? mixin的方法,但仍然不會工作,因爲我需要得到每個節點的.content字段,而不是實際的節點... 雖然寫這個,雖然這(但它似乎有點低效,雖然優雅)
found = document.find('//partner/name').collect{|name| name.content}.member?("Some Name")
還有其他的方法嗎?
第一個XPath適用於libxml-ruby和Nokogiri,所以我不確定它爲什麼會給你一個無效的XPath錯誤。值得注意的是,'!= nil`可能無法達到你想要的效果 - 即使在沒有匹配的情況下,你也會收到回收。你可能想要使用.empty?檢查是否有任何東西被發現。 – 2009-04-22 23:33:11