xPath: Eltern-Element auslesen

5 Kommentare
Marco Betschart, Webapplikations-Programmierer, bis 2010

Ab und an kommt es vor, dass man über eine Xml-Struktur stolpert, deren xPath-Abfrage das Eltern-Element zurückliefern soll. Eigentlich eine simple Anforderung und die Lösung ist ebenso einfach, man denkt halt einfach nicht dran…

Ich gehe dabei von der folgenden Xml-Struktur aus:

1<?xml version="1.0" encoding="utf-8"?>
2<root>
3 <parent id="15">
4 <datachild>Diese Daten sind wichtig fuer mich</datachild>
5 <querychild flag="1" />
6 </parent>
7</root>

Das xPath-Query, welches mir alle Elemente mit gesetztem "flag"-Attribut zurückliefert, ist schnell erstellt:

1<cfset myResult = xmlSearch(myXml,"/root/parent/querychild[@flag='1']") />

Jetzt bin ich aber an den Daten im datachild-Node interessiert. Das heisst, ich benötige den kompletten parent-Node:

1<cfset myResult = xmlSearch(myXml,"/root/parent/querychild[@flag='1']/..") />

Einfach eine "Verzeichnisebene" nach oben, so wie früher. Da kommt mir doch ein geeigneter Werbeslogan in den Sinn: Weil einfach einfach einfach ist.

neuen Kommentar erstellen

XPath's Gravatar
- Deine XML-Struktur ist leider fehlerhaft: es fehlen in Zeile 3 die abschließenden Anführungszeichen
- der Ausdruck /root/parent[querychild/@flag='1'] erfüllt den gleichen Zweck und kommt ohne die Parent-Referenz aus

Trotzdem vielen Danke für den Tipp, ich habe von einem gegeben Element aus den Wert eines übergeordneten Attributes via XPath benöitgt :)
XPath, am 13. August 2010 um 08:02 Uhr
Marco Betschart's Gravatar
Vielen Dank für den Hinweis, da hat sich definitiv ein Fehler eingeschlichen.

Zur Parent-Referenz: Die Abfragen erzielen (zumindest unter ColdFusion) unterschiedliche Resultate - würde mich interessieren mit was du die xPath - Abfragen gemacht hast?
Marco Betschart, am 13. August 2010 um 08:30 Uhr
XPath's Gravatar
die Abfrage hab ich mit .Net Framework (Windows) ausgeführt.
Rein inhaltlich sollte kein Unterschied sein zwischen ParentNode von ChildElement und Nodes, welche das Childelement aufweisen.
Selbst wenn der Child-Eintrag mehrfach vorhanden ist, bekomme ich mit dem parent verweis jeden node nur einmal. Inwiefern unterscheiden sich denn die Ergebnisse?
XPath, am 13. August 2010 um 12:24 Uhr
Marco Betschart's Gravatar
Das ist soweit schon korrekt, aber:

Mit der ersten xPath Abfrage erhalte ich nur die Child-Nodes auf die die Bedingung zutrifft. Bei der zweiten jedoch erhalte ich alle Child-Nodes, die auf die Bedingung zutreffen und zusätzlich den Parent-Node.

Ich denke das müsste auch unter .NET entsprechend gehandhabt werden?
Marco Betschart, am 13. August 2010 um 13:05 Uhr
XPath's Gravatar
<quote>Bei der zweiten jedoch erhalte ich alle Child-Nodes, die auf die Bedingung zutreffen und zusätzlich den Parent-Node.</quote>

Das kann ich so leider nicht bestätigen: ich erhalte immer nur ein Set an Nodes: entweder die Childs oder die Parents. Für beide Nodesets müsste ich beide Abfragen mit | verknüpfen.
XPath, am 16. August 2010 um 09:27 Uhr
Bitte lassen Sie dieses Feld leer
Kommentar hinzufügen


Bitte lassen Sie dieses Feld leer
Beitrag als E-Mail verschicken
E-Mail via Webmail versenden

Schön, dass Ihnen unser Beitrag gefallen hat. Benutzen Sie folgende Social Networking Dienste, um den Beitrag abzulegen und zu verteilen. Selbstverstädlich können Sie ein direktes Lesezeichen auf diesen Artikel setzen.