Wählen Sie nur den ersten übereinstimmenden Knoten in XPath
Ich habe Folgendes XML:
<parent>
<pet>
<data>
<birthday/>
</data>
</pet>
<pet>
<data>
<birthday/>
</data>
</pet>
</parent>
Und ich möchte nun wählen Sie den ersten Geburtstag des Elements über parent//birthday[1]
aber das gibt die beiden Geburtstags-Elemente, weil bothof Sie sind das erste Kind Ihrer Eltern.
Wie kann ich nur wählen Sie die erste Geburtstag-element für das gesamte Dokument, egal wo es sich befindet. Ich habe versucht parent//birthday[position()=1]
aber das funktioniert auch nicht.
- Was xpath-tool/library benutzt du?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du meinst (man beachte die Klammern!)
oder eine kürzere, aber weniger spezifische variation:
oder mehr semantische, die "Geburtstag des ersten Haustiers":
oder, wenn nicht alle Haustiere haben Geburtstag Einträge, die "Geburtstag der erste Haustier, das, für die ein Geburtstag ist, legen Sie":
Wenn Sie von einem context-Knoten können Sie kürzen Sie den Ausdruck, indem es relativ zum Kontext-node.
Erklärung:
/parent/pet/data/birthday[1]
wählt alle<birthday>
Knoten, dass sind die ersten in Ihren jeweiligen Eltern (die<data>
Knoten), im gesamten Dokument(/parent/pet/data/birthday)[1]
wählt alle<birthday>
Knoten, und dieser (das ist, was die Runden Klammern machen, erzeugen Sie einen Vermittler node-set), es ist der ersteFYI: visualisieren Sie die Ergebnisse der verschiedenen Xpath-Abfragen mit der (kostenlosen) XPathVisualizer tool. Funktioniert nur unter Windows.
Ok, ich gebe zu, das ist entsetzlich, und es muss einen besseren Weg, aber es scheint zu funktionieren.
Schaue ich für alle Elemente auf der zweiten Ebene in dem Baum, der ein Nachkomme element namens "birthday", die nicht über eine vorhergehende nebengeordnete element hat Geburtstag-element als Nachkomme.
pet
Elemente mit und ohnebirthday
Nachkommen, würde dies übereinstimmen, alle mit einerbirthday
, nicht nur das erste mal.versuchen
//
findet Knoten, egal wo es in der Hierarchiekönnten Sie auch tun,