XPath, чтобы получить все дочерние элементы, кроме одного с определенным именем? - PullRequest
34 голосов
/ 08 ноября 2010

Как настроить таргетинг на все элементы в документе , кроме конкретного имени элемента?

Например, я хочу исключить элементы terminate.Они могут встречаться по всему документу.

 <root>
     <terminate attr="1" />
     <other>
         The brown fox jumps over the fence. 
         <terminate>
            <b>stuff</b>
         </terminate>
     </other>
 </root>

Я пытался использовать оператор not(..), но безуспешно, потому что я использую его неправильно.

И, честно говоря, Google не'жестко!

Ответы [ 2 ]

52 голосов
/ 08 ноября 2010

Следующий xpath должен работать

/root/*[not(self::terminate)] 

Кроме того, я думаю, вы можете сделать это и с этим

/root/*[not(name()='terminate')]
1 голос
/ 14 ноября 2017

Если вы используете XPath 2.0, вы можете использовать

/root/* except /root/terminate

Что делает то, что вы ожидаете.Это соответствует для узлов, которые существуют в первой последовательности, но не во второй.

Спецификация XPath 2.0 - кроме оператора

...