XPath: Wie wähle ich Knoten aus, die keine Attribute haben?

94

Wie wähle ich mit XPath Knoten aus, die keine Attribute haben (wobei Attributanzahl = 0 ist)?

Beispielsweise:

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

Antworten:

153
//node[not(@*)]

Dies ist der XPath, um alle Knoten mit dem Namen "Knoten" im Dokument ohne Attribute auszuwählen.

48klocs
quelle
1
Das ist schön, aber es findet immer noch <node class=""></node>etwas, was wir dagegen tun können?
Marek
1
@MarekCzaplicki siehe Antwort unten, um diesen Fall zu behandeln. stackoverflow.com/questions/1323755/…
phil
23
//node[count(@*)=0]

Wählt alle <Knoten> mit Nullattributen aus

erik
quelle
9

Um Marek Czaplickis Kommentar anzusprechen und die Antwort zu erweitern

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

.... wählt alle Knotenelemente mit Nullattributen ODER mit Attributen aus, die alle leer sind. Wenn es sich nur um ein bestimmtes Attribut handelt, an dem Sie interessiert sind, und nicht um alle, können Sie es verwenden

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

... und dies würde alle Knotenelemente auswählen, die entweder kein Attribut namens attribute1OR haben und deren attribute1Attribut leer ist.

Das heißt, die folgenden Elemente würden durch einen dieser xpath-Ausdrücke ausgewählt

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

Siehe jsfiddle Beispiel hier

phil
quelle