¿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.

Respuestas:


241

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

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

¿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


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

1

Use boolean functioncomo a continuación:

//a[(contains(@id, 'xx'))=false]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.