Der XPath bookstore/book[1]
wählt den ersten Buchknoten unter aus bookstore
.
Wie kann ich den ersten Knoten auswählen, der einer komplizierteren Bedingung entspricht, z. B. den ersten Knoten, der übereinstimmt? /bookstore/book[@location='US']
Verwenden:
(/bookstore/book[@location='US'])[1]
Dadurch werden zuerst die Buchelemente mit dem Standortattribut 'US' abgerufen. Dann wird der erste Knoten aus diesem Satz ausgewählt. Beachten Sie die Verwendung von Klammern, die für einige Implementierungen erforderlich sind.
Beachten Sie, dass dies nicht dasselbe ist, es /bookstore/book[1][@location='US']
sei denn, das erste Element hat zufällig auch dieses Standortattribut.
/bookstore/book[@location='US'][1]
gibt nicht alle Bücher aus 'US' zurück. Ich habe es mehrmals und unter den xpath-Implementierungen verschiedener Sprachen getestet./bookstore/book[@location='US'][1]
gibt das erste "US" -Buch unter einem Buchladen zurück. Wenn es mehrere Buchhandlungen gibt, wird die erste von jeder zurückgegeben. Dies ist, was das OP angefordert hat (der erste Knoten unter dem Buchladen). Ihre Version gibt nur ein Buch aus allen Buchhandlungen zurück (das erste Spiel)./bookstore/book[@location='US'][1]
funktioniert nur mit einfacher Struktur.Fügen Sie etwas mehr Struktur hinzu und die Dinge brechen.
Mit
/bookstore/category/book[@location='US'][1]
ergibtnicht "der erste Knoten, der einer komplizierteren Bedingung entspricht".
/bookstore/category/book[@location='US'][2]
gibt nichts zurück.Mit Klammern können Sie das Ergebnis erhalten, für das die ursprüngliche Frage war:
(/bookstore/category/book[@location='US'])[1]
gibtund
(/bookstore/category/book[@location='US'])[2]
funktioniert wie erwartet.quelle
/bookstore/book[1]
und NICHT(/bookstore/book)[1]
. Der von Ihnen angegebene Fall ist nicht derselbe wie der, nach dem Sie gefragt haben. Vermutlich akzeptierte OP meine Antwort so, wie er es erwartet (und angefordert) hatte.'(//div[text() = "'+ name +'"])[1]/following-sibling::*/div/text()'
. Falls viele Knoten übereinstimmenname
.Als Erklärung zu Jonathan Finglands Antwort:
[position()=1 and @location='US']
) müssen als Ganzes wahr sein[position()=1][@location='US']
) müssen wahr sein , eine nach der anderen[position()=1][@location='US']
! =[@location='US'][position()=1]
while
[position()=1 and @location='US']
==[@location='US' and position()=1]
[position()=1]
kann abgekürzt werden[1]
Sie können komplexe Ausdrücke in Prädikaten mit den Booleschen Operatoren „bauen
and
“ und „or
“, und mit den Booleschen XPath - Funktionennot()
,true()
undfalse()
. Außerdem können Sie Unterausdrücke in Klammern setzen.quelle
Der einfachste Weg, den ersten englischen Buchknoten (im gesamten Dokument) zu finden, unter Berücksichtigung einer komplizierteren strukturierten XML-Datei wie:
ist xpath Ausdruck:
quelle
Also angesichts der oben genannten; Sie können das erste Buch mit auswählen
Und dies wird der erste sein, der irgendwo einen Standort in den USA hat. [A1]
Würde den Knoten zurückgeben, der mit allen Büchern mit dem Speicherort US festgelegt wurde. [A1, B1, C2]
Würde den ersten Buchspeicherort US zurückgeben, der in einer Kategorie irgendwo im Dokument vorhanden ist. [B1]
gibt das erste Buch mit dem Speicherort US zurück, das sich irgendwo unter dem Root-Element-Buchladen befindet; den / bookstore-Teil wirklich überflüssig machen. [A1]
In direkter Antwort:
Gibt Ihnen den ersten Knoten für das Buchelement mit dem Speicherort US zurück, der sich unter der Buchhandlung [A1] befindet.
Übrigens, wenn Sie wollten, finden Sie in diesem Beispiel das erste US-Buch, das kein direktes Kind der Buchhandlung war:
quelle
Verwenden Sie den Index, um den gewünschten Knoten zu erhalten, wenn xpath kompliziert ist oder mehr als ein Knoten mit demselben xpath vorhanden ist.
Ex :
Sie können die Nummer angeben, welchen Knoten Sie möchten.
quelle
Wenn für die angegebene XML-Datei ein Namespace bereitgestellt wird, ist es besser, diesen zu verwenden.
quelle
zum Beispiel.
Und
quelle
Mit Hilfe eines Online- Xpath-Testers schreibe ich diese Antwort ...
Dafür:
der folgende xpath:
Ausgänge:
Da 1 bedeutet, wählen Sie alle td- Elemente aus, die das erste Kind ihres eigenen direkten Elternteils sind.
Aber der folgende xpath:
Ausgänge:
quelle