Wählen Sie einen bestimmten Knoten in XPath

8

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

    
Benjamin 29.01.2010, 15:35
quelle

5 Antworten

12

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
  • aus
  • (/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
Tomalak 29.01.2010, 16:54
quelle
4

Zu Ihrer Information: Sie können die Ergebnisse der verschiedenen Xpath-Abfragen mit dem (kostenlosen) XPathVisualizer-Tool visualisieren. Funktioniert nur unter Windows.

alt text http://i50.tinypic.com/f8apd.jpg

    
Cheeso 29.01.2010 21:27
quelle
1

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.

    
Darrel Miller 29.01.2010 15:54
quelle
0
%Vor%     
igor 29.01.2010 16:27
quelle
-1

probiere

aus %Vor%

// findet Knoten, egal wo in der Hierarchie sie sich befinden

könntest du auch

machen %Vor%     
carillonator 29.01.2010 15:40
quelle

Tags und Links