Per xPath die Position des Elternelement bekommen
Lena
- xml
Hallo zusammen,
ich habe folgende XML-Datei:
<AAA>
<BBB>
<CCC id="h" />
<CCC id="f" />
</BBB>
<BBB>
<CCC id="o" />
<CCC id="i" />
<CCC id="x" />
</BBB>
<BBB>
<CCC id="a" />
</BBB>
</AAA>
Jetzt möchte ich für ein CCC-Element die Position des Elternknotens bekommen, ohne alles von Hand zu durchlaufen. Also per xPath-Query (das ganze läuft in PHP).
Für CCC id="o" für 1 herauskommen (genauso wie für id="i" und id="x"), für id="a" käme 2 heraus (für den Fall, das man bei 0 anfängt zu zählen).
Die id's sind eindeutig.
Ich bin noch xpath-Anfänger und verstehe nicht, warum mein Ansatz nicht funktioniert. Hat jemand eine Lösung und einen Ansatz, den ich weiterverfolgen kann?
$xpath = '//CCC[@id="o"]/preceding-sibling::*';
Danke schön für Eure Hilfe
Gruß
Lena
Hellihello
$xpath = '//CCC[@id="o"]/preceding-sibling::*';
Wäre wohl das vorhergehende Geschwisterelement.
<a>
<b/>
<c/>
</a>
wäre wohl <b> das preceeding-sibling von c?
parent: könnte helfen.
Dank und Gruß,
[frankx](http://community.de.selfhtml.org/visitenkarten/view.php?key=82)
--
[tryin to](http://sauer-ernst.de) [multitain](http://multitain.de) - Globus = Planet != Welt
Hellihello
$xpath = '//CCC[@id="o"]/preceding-sibling::*';
>
> Wäre wohl das vorhergehende Geschwisterelement.
>
> <a>
> <b/>
> <c/>
> </a>
>
> wäre wohl <b> das preceeding-sibling von c?
>
> parent: könnte helfen.
Oder "/..":
~~~php
<?php
$xml_string=
'<?xml version="1.0"?>
<wurzel testattr="abc">
<testnode>
testnode_Textnode
<subnode id="abc">subnode_abc_Textnode</subnode>
<subnode id="bcd">subnode_bcd_Textnode</subnode>
</testnode>
<testnode>
test_node_2_Textnode
</testnode>
</wurzel>';
// echo $xml_string;
$simple_xml = simplexml_load_string($xml_string);
// var_dump($simple_xml);
$query_string="//subnode[@id='abc']/..";
$node_list = $simple_xml->xpath($query_string);
var_dump($node_list);
s.a. http://de.selfhtml.org/xml/darstellung/xpathsyntax.htm
Dank und Gruß,
Hallo Frankx
Danke für Deine Hilfe.
Ich wollte aber nicht nur den Knoten, sondern auch seine Position im Gesamtkonstrukt. Deshalb dachte ich, die Vorgeschwister (oder so) zu zählen wäre eine tolle Idee.
aber mit count und so komme ich da nicht weiter
Gruß
annA
gucke hier, wer mag:
$xpath = 'BBB/CCC[@id="o"]/ancestor::*/preceding-sibling::*';
danach noch ein count übers ergebnisarray geschüttet und schwups
scheint zu funktionieren. Wer sicher gehen will, der ersetzt die sternchen entsprechend
Lenchen