Подтвердить что ты не робот

XPath для получения всех дочерних элементов, кроме одного с определенным именем?

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

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

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

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

И, честно говоря, попытка Google "не" жесткая!

4b9b3361

Ответ 1

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

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

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

/root/*[not(name()='terminate')]

Ответ 2

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

/root/* except /root/terminate

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

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