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.

Odpowiedzi:


241

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

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

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


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)]

1

Użyj boolean functionjak poniżej:

//a[(contains(@id, 'xx'))=false]
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.