106 votes

XPath : Comment sélectionner les nœuds qui n'ont pas d'attributs ?

En utilisant XPath, comment sélectionner les nœuds qui n'ont pas d'attributs (où le nombre d'attributs = 0) ?

Par exemple :

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

174voto

48klocs Points 3749
//node[not(@*)]

C'est le XPath pour sélectionner tous les nœuds nommés "node" dans le document sans aucun attribut.

1 votes

C'est bien, mais ça trouve toujours <node class=""></node> On peut y faire quelque chose ?

1 votes

@MarekCzaplicki voir la réponse ci-dessous pour traiter ce cas. stackoverflow.com/questions/1323755/

24voto

erik Points 797
//node[count(@*)=0]

Sélectionne tous les <node> avec zéro attribut

12voto

pip Points 81

Pour répondre au commentaire de Marek Czaplicki et développer la réponse

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

.... sélectionnera tous les éléments de nœuds ayant zéro attribut OU dont les attributs sont tous vides. Si vous vous intéressez à un attribut particulier plutôt qu'à tous les attributs, vous pouvez utiliser la méthode suivante

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

...et cela sélectionnerait tous les éléments de nœuds qui n'ont pas d'attribut appelé attribute1 OU qui ont un attribute1 qui est vide.

En d'autres termes, les éléments suivants seraient sélectionnés par l'une ou l'autre de ces expressions xpath.

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

Voir l'exemple de jsfiddle ici

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