Как использовать «не» в 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? Это не совсем мой случай, он немного сложнее, но примерно такой же.
Али
40

Вы можете использовать not(expression)функцию

или

expression != true()
Абдельхамид Махмуд
источник
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]
frianH
источник