189 votes

Comment utiliser "not" dans XPath ?

Je veux écrire quelque chose de ce genre :

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

(c'est-à-dire tous les liens dont l'attribut 'id' ne contient pas la chaîne 'xx')

Je n'arrive pas à trouver la bonne syntaxe.

280voto

James Sulak Points 9959

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

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

0 votes

Il existe un moyen de dire de récupérer toutes les balises <p> mais pas la balise <a> à l'intérieur ? imaginez quelque chose comme <p>text text<a class="x">TEXT</a>text text</p> . je veux tout le texte dans p mais pas le TEXT dans 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 la même chose.

42voto

Vous pouvez utiliser not(expression) fonction

ou

expression != true()

19voto

Harun ergül Points 13

Aucune de ces réponses n'a fonctionné pour moi pour python. J'ai résolu le problème de la façon suivante

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

Vous pouvez également utiliser ou condition dans votre xpath par | opérateur. Par exemple

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

Parfois, nous voulons un élément qui n'a pas de classe. Vous pouvez donc faire comme

a[not(@class)]

2voto

frianH Points 5901

Utilice boolean function comme ci-dessous :

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

-3voto

Micheál Healy Points 20

Vous devriez également consulter la fonction false() qui fonctionne à peu près de la même manière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X