Xpath: Как найти узел, который не является потомком определенного узла

#javascript #dom #xpath #xquery

#javascript #dom #xpath #xquery

Вопрос:

Например, у меня есть XML-документ, подобный этому

 a[@class="wrong]
 ...
   b
    c 
d
 ...
   b
    c <= this one
  

Я хотел бы выбрать второй // b / c, не беря // b / c из первой части с @class=»wrong».
И между нежелательным узлом и // b / c есть какой-то неизвестный узел.
И я не знаю, какая точная разметка с нежелательным классом.

Итак, я пытаюсь //*[not(contains(@class,'wrong'))]/b/c , но это не работает, потому что, если в ‘…’ есть хотя бы один узел без этого класса, также возвращается первый b / c.

Ответ №1:

Используйте:

 //b[not(ancestor::*[contains(@class,'wrong')])]/c