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.

Gars
la source

Réponses:

241

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

//a[not(contains(@id, 'xx'))]
James Sulak
la source
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
40

vous pouvez utiliser la not(expression)fonction

ou

expression != true()
Abdelhameed Mahmoud
la source
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)]
Harun ERGUL
la source
1

Utilisez boolean functioncomme ci-dessous:

//a[(contains(@id, 'xx'))=false]
frianH
la source