In Xpath möchte ich Elemente auswählen, die einem bestimmten Wert entsprechen.
XML-Beispieldaten:
<aaa id="11" >
<aaa id="21" >
<aaa id="31" ></aaa>
<bbb id="32" >
<aaa id="41" ></aaa>
<bbb id="42" ></bbb>
<ccc id="43" ></ccc>
<ddd id="44" >qwerty</ddd>
<ddd id="45" ></ddd>
<ddd id="46" ></ddd>
</bbb>
</aaa>
<bbb id="22" >
<aaa id="33" >qwerty</aaa>
<bbb id="34" ></bbb>
<ccc id="35" ></ccc>
<ddd id="36" ></ddd>
<ddd id="37" ></ddd>
<ddd id="38" ></ddd>
</bbb>
<ccc id="23" >qwerty</ccc>
<ccc id="24" ></ccc>
</aaa>
Verwenden Sie jetzt den XPath:
//ccc[.='qwerty']
Ich erhalte die richtigen, erwarteten Ergebnisse:
Name Value
ccc qwerty
Verwenden Sie jetzt den XPath:
//aaa[.='qwerty']
Ich erhalte unerwartete Ergebnisse:
Name Value
aaa
aaa qwerty
Und was mich besonders interessiert, ist, wie man ein Element mit diesem Wert auswählt
XPath:
//*[.='qwerty']
Ich bekomme sehr seltsame unerwartete Ergebnisse:
Name Value
aaa
bbb
ddd qwerty
bbb qwerty
aaa qwerty
ccc qwerty
Kann jemand diese Ergebnisse erklären und wie ich meine XPath-Ausdrücke korrigiere, um mehr erwartete Ergebnisse zu erzielen?
. =
anders ist als XPathtext() =
. Siehe übereinstimmende Textknoten unterscheidet sich von übereinstimmenden Zeichenfolgenwerten, um zu erfahren, warum.Antworten:
Die XPath-Spezifikation. Definiert den Zeichenfolgenwert eines Elements als Verkettung (in Dokumentreihenfolge) aller seiner Textknoten-Nachkommen .
Dies erklärt die "seltsamen Ergebnisse".
"Bessere" Ergebnisse können mit den folgenden Ausdrücken erzielt werden:
Oben wird jedes Element im Dokument ausgewählt, das mindestens ein untergeordnetes Textknoten mit dem Wert 'qwerty' hat.
Das obige Element wählt jedes Element im Dokument aus, das nur ein untergeordnetes Textknoten hat, und sein Wert lautet: 'qwerty'.
quelle
text()
ist einer der möglichen Knotentests in XPath, was bedeutet "Ist dies ein Textknoten?". Andere nodetests sindcomment()
,processing-instruction()
oder einfach nurnode()
.Versuchen
//*[text()='qwerty']
weil.
ist dein aktuelles Elementquelle