Ich habe folgendes XML:
%Vor% Und jetzt möchte ich das erste Geburtstags-Element über parent//birthday[1]
auswählen, aber das gibt beide Geburtstags-Elemente zurück, weil beide von ihnen das erste Kind ihrer Eltern sind. Wie kann ich nur das erste Geburtstagselement des gesamten Dokuments auswählen, egal wo es sich befindet. Ich habe parent//birthday[position()=1]
ausprobiert, aber das funktioniert auch nicht.
Prost
Sie meinen (beachten Sie die Klammern!)
%Vor%oder, kürzer, aber weniger beschreibend
%Vor%oder, besser, weil semantisch korrekt:
%Vor%oder, wenn nicht alle Haustiere Geburtstagseinträge haben:
%Vor% Vermeiden Sie in jedem Fall die Verwendung von //
, da es rechenintensiv ist (es testet rekursiv jeden Knoten im Dokument). Wenn die Dokumentstruktur fest und bekannt ist, ist dies leicht zu vermeiden.
Wenn Sie von einem Kontextknoten aus arbeiten, können Sie den Ausdruck abkürzen, indem Sie ihn relativ zu diesem Kontextknoten machen.
Kurze Erklärung:
/parent/pet/data/birthday[1]
wählt alle <birthday>
-Knoten, die die ersten in ihren jeweiligen Eltern sind (die <data>
-Knoten), im gesamten Dokument (/parent/pet/data/birthday)[1]
selektiert alle <birthday>
Knoten, und von denen (das ist, was die Klammern tun, sie erstellen einen Zwischenknotensatz), es nimmt den ersten Zu Ihrer Information: Sie können die Ergebnisse der verschiedenen Xpath-Abfragen mit dem (kostenlosen) XPathVisualizer-Tool visualisieren. Funktioniert nur unter Windows.
Ok, ich gebe zu, das ist schrecklich und es muss einen besseren Weg geben, aber es scheint zu funktionieren.
%Vor%Ich suche nach allen Elementen auf der zweiten Ebene in der Struktur, die ein nachkommendes Element namens birthday haben, die kein vorhergehendes Geschwisterelement haben, das ein Geburtstags-Element als einen Nachkommen hat.
probiere
aus %Vor% //
findet Knoten, egal wo in der Hierarchie sie sich befinden
könntest du auch
machen %Vor%Tags und Links xpath