How to use "not" in XPath?

196.9k views Asked by At

I want to write something of the sort:

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

(meaning all the links who's 'id' attribute doesn't contain the string 'xx')

I can't find the right syntax.

5

There are 5 answers

2
James Sulak On BEST ANSWER

not() is a function in XPath (as opposed to an operator), so

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

Use boolean function like below:

//a[(contains(@id, 'xx'))=false]
0
user22291669 On

not() function combined with "and" operator worked in my case. I am using typescript. For example,

contains(text(),'textIWantToBeMatched') and not(contains(text(),'subTextIDoNotWantToBeMatched'))
0
Abdelhameed Mahmoud On

you can use not(expression) function

or

expression != true()
0
Harun ERGUL On

None of these answers worked for me for python. I solved by this

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

Also you can use or condition in your xpath by | operator. Such as

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

Sometimes we want element which has no class. So you can do like

a[not(@class)]