XPath: ¿Cómo seleccionar nodos que no tienen atributos?


94

Usando XPath, ¿cómo seleccionar nodos que no tienen atributos (donde el atributo cuenta = 0)?

Por ejemplo:

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1="bbbb"></node>
    <node></node> <- FIND THIS
</nodes>

Respuestas:


153
//node[not(@*)]

Ese es el XPath para seleccionar todos los nodos llamados "nodo" en el documento sin ningún atributo.


1
Esto es bueno, pero todavía encuentra <node class=""></node>algo que podamos hacer al respecto.
Marek

1
@MarekCzaplicki vea la respuesta a continuación para abordar este caso. stackoverflow.com/questions/1323755/…
phil

23
//node[count(@*)=0]

Seleccionará todos los <nodo> con atributos cero


9

Para abordar el comentario de Marek Czaplicki y ampliar la respuesta

//node[not(@*) or not(string-length(@*))]

.... seleccionará todos los elementos de nodo con atributos cero O que tengan atributos que estén todos vacíos. Si solo le interesa un atributo en particular, en lugar de todos ellos, puede usar

//node[not(@attribute1) or not(string-length(@attribute1))]

... y esto seleccionaría todos los elementos de nodo que no tienen un atributo llamado attribute1OR que tienen unattribute1 atributo que está vacío.

Es decir, los siguientes elementos serían seleccionados por cualquiera de estas expresiones xpath

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1=""></node> <!--This one -->
    <node attribute1="bbbb"></node>
    <node></node> <!--...and this one -->
</nodes>

Vea el ejemplo de jsfiddle aquí

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.