Найти тег xpath не по указанному пути - PullRequest
3 голосов
/ 17 марта 2012

Можно ли с помощью 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 ]

4 голосов
/ 17 марта 2012

Использование:

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

Выбирает все элементы bar, которые не нигде под элементом foo.(Это отличается от предположения, сделанного Димитром, но вы не указали ни один из способов)

Для предоставленного XML-документа выбирается только один элемент: bar под корнем.

1 голос
/ 17 марта 2012

Использование :

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

Выбирает все элементы в документе XML, которые не являются foo и имеют дочерний элемент bar.

Дляв предоставленном XML-документе выбирается только один элемент - root.

...