¿Cómo usar "no" en xpath?

164

Quiero escribir algo por el estilo:

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

(lo que significa que todos los enlaces que tienen el atributo 'id' no contienen la cadena 'xx')

No puedo encontrar la sintaxis correcta.

Chico
fuente

Respuestas:

241

not () es una función en xpath (a diferencia de un operador), entonces

//a[not(contains(@id, 'xx'))]
James Sulak
fuente
¿hay alguna manera de decir que agarre todas las etiquetas <p> pero no la etiqueta <a> dentro de ellas? imagine algo como <p> texto de texto <a class="x"> TEXT </a> texto de texto </p>. Quiero todo el texto en p pero no el TEXTO en a. ¿Es eso posible con XPath? Este no es exactamente mi caso, es un poco más complicado que eso, pero es más o menos lo mismo.
Ali
40

puedes usar la not(expression)función

o

expression != true()
Abdelhameed Mahmoud
fuente
13

Ninguna de estas respuestas me funcionó para Python. Resuelto por esto

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

También puede usar o condicionar en su xpath por |operador. Como

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

A veces queremos elemento que no tiene clase. Entonces puedes hacer como

a[not(@class)]
Harun ERGUL
fuente
1

Use boolean functioncomo a continuación:

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