是否可以使用Nokogiri::XML.xpath
或任何其他XML解析器来查找指定路径之外的标记?
例如。如果我有以下XML:
<root>
<bar>baz</bar>
<foo>
<bar>baz</bar>
</foo>
</root>
我知道bar会一直存在于foo内部,但它也可能存在于foo外部,不一定每次都在同一个地方,有没有办法用xpath搜索这种条件?我知道你可以做xml.xpath("//bar")
,它会返回bar的所有实例,但我需要能够知道bar存在的父对象。
使用:
xml.xpath('//bar[not(ancestor::foo)]')
这将选择foo
元素下任何位置都不的所有bar
元素。(这与Dimitre的假设不同,但你没有指定任何一种方式)
对于所提供的XML文档,只选择一个元素:根目录下的bar
。
使用:
//*[not(self::foo) and bar]
这将选择XML文档中不是foo
并且具有子bar
的所有元素。
对于所提供的XML文档,这只选择了一个元素——root
。