查找不在指定路径中的xpath标记

时间:2012-03-17 15:04:16

标签: ruby xpath nokogiri

是否可以使用Nokogiri::XML.xpath或任何其他XML解析器查找指定路径之外的标记?

例如。如果我有以下XML:

<root>
  <bar>baz</bar>
  <foo>
    <bar>baz</bar>
  </foo>
</root>

我知道bar会永远存在于foo中,但它也可能存在于foo之外,并且不一定每次都在同一个地方,有没有办法用xpath搜索那种情况?我知道你可以做xml.xpath("//bar")并且它将返回bar的所有实例,但我需要能够知道该bar存在的父对象。

2 个答案:

答案 0 :(得分:4)

使用:

xml.xpath('//bar[not(ancestor::foo)]')

这会选择bar元素下 的所有foo个元素。 (这与Dimitre的假设不同,但你没有指明任何一种方式)

对于提供的XML文档,这只选择一个元素:根目录下的bar

答案 1 :(得分:1)

使用

//*[not(self::foo) and bar]

这将选择XML文档中不是foo且具有子bar的所有元素。

对于提供的XML文档,这只选择一个元素 - root