好吧,我有一个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