Jak używać „nie” w xpath?

164

Chcę coś takiego napisać:

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

(co oznacza, że ​​wszystkie linki, które istnieją w atrybucie „id”, nie zawierają ciągu „xx”)

Nie mogę znaleźć odpowiedniej składni.

Chłopak
źródło

Odpowiedzi:

241

not () jest funkcją w xpath (w przeciwieństwie do operatora), więc

//a[not(contains(@id, 'xx'))]
James Sulak
źródło
czy istnieje sposób, aby powiedzieć, że pobierz wszystkie znaczniki <p>, ale nie zawiera znacznika <a>? wyobraź sobie coś takiego jak <p> tekst tekst <a class="x"> TEXT </a> tekst tekst </p>. chcę cały tekst w p, ale nie tekst w. czy to możliwe dzięki XPath? To nie jest dokładnie mój przypadek, jest trochę bardziej skomplikowany, ale mniej więcej taki sam.
Ali
40

możesz użyć not(expression)funkcji

lub

expression != true()
Abdelhameed Mahmoud
źródło
13

Żadna z tych odpowiedzi nie działała dla mnie w przypadku Pythona. Rozwiązałem przez to

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

Możesz także użyć lub warunkować w swojej ścieżce xpath według |operatora. Jak na przykład

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

Czasami chcemy elementu, który nie ma klasy. Więc możesz zrobić lubić

a[not(@class)]
Harun ERGUL
źródło
1

Użyj boolean functionjak poniżej:

//a[(contains(@id, 'xx'))=false]
frianH
źródło