Comment utiliser «non» dans xpath?


164

Je veux écrire quelque chose du genre:

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

(ce qui signifie que tous les liens dont l'attribut 'id' ne contient pas la chaîne 'xx')

Je ne trouve pas la bonne syntaxe.

Réponses:


241

not () est une fonction dans xpath (par opposition à un opérateur), donc

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

y a-t-il un moyen de dire saisir toutes les balises <p> mais pas la balise <a> à l'intérieur? imaginez quelque chose comme <p> texte texte <a class="x"> TEXT </a> texte texte </p>. je veux tout le texte en p mais pas le TEXTE en a. est-ce possible avec XPath? Ce n'est pas exactement mon cas, c'est un peu plus compliqué que ça mais c'est plus ou moins pareil.
Ali le


13

Aucune de ces réponses n'a fonctionné pour moi pour python. J'ai résolu par ça

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

Vous pouvez également utiliser ou conditionner dans votre xpath par |opérateur. Tel que

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

Parfois, nous voulons un élément qui n'a pas de classe. Alors tu peux faire comme

a[not(@class)]

1

Utilisez boolean functioncomme ci-dessous:

//a[(contains(@id, 'xx'))=false]
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.