Lena: Per xPath die Position des Elternelement bekommen

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

  1. 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 
    
    1. 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ß,

      frankx

      --
      tryin to multitain  - Globus = Planet != Welt
      1. 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

        1. 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