XPath: comment sélectionner des nœuds qui n'ont pas d'attributs?

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

Par exemple:

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1="bbbb"></node>
    <node></node> <- FIND THIS
</nodes>
75
demandé sur FabienB 2009-08-24 21:44:40

3 réponses

//node[not(@*)]

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

122
répondu 48klocs 2009-08-24 18:04:43
//node[count(@*)=0]

Sélectionnera tous les avec zéro attribut

21
répondu erik 2009-08-24 17:58:46

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œud avec zéro attribut ou qui ont des attributs qui sont tous vides. Si c'était juste un attribut particulier qui vous intéresse, plutôt que tous les autres, alors vous pouvez utiliser

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

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

C'est-à-dire que les éléments suivants seraient choisi par l'une de ces expressions xpath

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1=""></node> <!--This one -->
    <node attribute1="bbbb"></node>
    <node></node> <!--...and this one -->
</nodes>
4
répondu phil 2017-07-27 09:54:55