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>

Antworten:


153
//node[not(@*)]

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


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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.