Как использовать «не» в xpath?


164

Я хочу написать что-то вроде:

//a[not contains(@id, 'xx')]

(имеется в виду, что все ссылки, которые есть в атрибуте 'id', не содержат строку 'xx')

Я не могу найти правильный синтаксис.

Ответы:


241

not () - это функция в xpath (в отличие от оператора), поэтому

//a[not(contains(@id, 'xx'))]

Есть ли способ сказать, захватить все теги <p>, но не тег <a> внутри них? представьте что-то вроде <p> текстового текста <a class="x"> TEXT </a> текстового текста </ p>. Я хочу, чтобы весь текст в р, но не текст в. это возможно с XPath? Это не совсем мой случай, он немного сложнее, но примерно такой же.
Али


13

Ни один из этих ответов не работал для меня на Python. Я решил этим

a[not(@id='XX')]

Также вы можете использовать или условие в вашем xpath |оператором. Такие как

a[not(@id='XX')]|a[not(@class='YY')]

Иногда нам нужен элемент, который не имеет класса. Так что вы можете сделать как

a[not(@class)]

1

Используйте boolean functionкак ниже:

//a[(contains(@id, 'xx'))=false]
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.