2010-11-08 3 views
28

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

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

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

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

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

ответ

41

Следующая XPath должно работать

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

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

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

Для выбора * все * элементы, в любом месте в документе, используйте: '// * [не (само :: а)]' – jpadvo

+8

"Я не могу самостоятельно прекратить" =) – roryok

1

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

/root/* except /root/terminate 

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

XPath 2.0 Specification - except operator