XML-Knoten: mehrere Kinderelemente: Array, nur ein Element, direkter Zugriff auf Kind

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • XML-Knoten: mehrere Kinderelemente: Array, nur ein Element, direkter Zugriff auf Kind

    Hi,

    gegeben sind zwei XML mit etwa der folgenden Struktur:

    Code:
      <Buecherei>
    	 <Buch>
    		<Autor>Umberto Eco</Autor>
    		<Titel>Das Foucaultsche Pendel</Titel>
    	 </Buch>
    	 <Strasse>Bahnhofstr</Strasse>
    	 <Stadt>Berlin</Stadt>
      </Buecherei>
    und

    Code:
      <Buecherei>
    	 <Buch>
    		<Autor>Dan Brown</Autor>
    		<Titel>Das Symbol</Titel>
    	 </Buch>
    	 <Buch>
    		<Autor>Douglas Adams</Autor>
    		<Titel>Per Anhalter durch die Galaxis</Titel>
    	 </Buch>
    	 <Buch>
    		<Autor>Philip Vandenberg</Autor>
    		<Titel>Das fuenfete Evangelium</Titel>
    	 </Buch>
    	 <Buch>
    		<Autor>George Orwell</Autor>
    		<Titel>1984</Titel>
    	 </Buch>
    	 <Strasse>Berliner Strasse</Strasse>
    	 <Stadt>Frankfurt am Main</Stadt>
      </Buecherei>
    PHP macht aus dem ersten mit SimpleXML dann so etwas:

    PHP-Code:
    array(
        
    'Buch' => array(
                               
    'Autor' => 'Umberto Eco',
                               
    'Titel' => 'Das Foucaultsche Pendel',
                            ),
        
    'Strasse' => 'Bahnhofstr',
        
    'Stadt' => 'Berlin',

    Aus dem zweiten dann schlauerweise

    PHP-Code:
    array(
        
    'Buch' => array(
                               
    => array(
                                               
    'Autor' => 'Dan Brown',
                                              
    'Titel' => '>Das Symbol',
                                             )
                               
    => array(
                                               
    'Autor' => 'Douglas Adams',
                                              
    'Titel' => 'Per Anhalter durch die Galaxis',
                                             )
                               
    => array(
                                               
    'Autor' => 'Philip Vandenberg',
                                              
    'Titel' => 'Das fuenfete Evangelium',
                                             )
                               
    => array(
                                               
    'Autor' => 'George Orwell',
                                              
    'Titel' => '1984',
                                             )
                            ),
        
    'Strasse' => 'Bahnhofstr',
        
    'Stadt' => 'Berlin',

    Prinzipiell ist das ja richtig, macht aber die Auswertung schwieriger, weil man ja den Fall abfangen muss.

    Ich hatte das auch schon mit einem XML versucht, bei dem ich explizit einen "Zwischenknoten" hinzugefügt hatte, das Problem ist geblieben.

    Gibt es da eine Einstellung, die mir das entsprechende Array mit der gleichen Struktur zurückgibt?

    Gruss,
    Markus

  • #2
    Vielleicht wäre es in diesem Fall einfacher mit dem DomDocument Objekt von PHP zu arbeiten.

    Ein kleines Beispiel:
    PHP-Code:
    $str = <<<XML
        <Buecherei>
         <Buch>
            <Autor>Dan Brown</Autor>
            <Titel>Das Symbol</Titel>
         </Buch>
         <Buch>
            <Autor>Douglas Adams</Autor>
            <Titel>Per Anhalter durch die Galaxis</Titel>
         </Buch>
         <Buch>
            <Autor>Philip Vandenberg</Autor>
            <Titel>Das fuenfete Evangelium</Titel>
         </Buch>
         <Buch>
            <Autor>George Orwell</Autor>
            <Titel>1984</Titel>
         </Buch>
         <Strasse>Berliner Strasse</Strasse>
         <Stadt>Frankfurt am Main</Stadt>
        </Buecherei>
    XML;
    $dom = new DomDocument();
    $dom->loadXML($str);

    $items $dom->getElementsByTagName('Buch');
    for (
    $i 0$i $items->length$i++) {
        echo 
    $items->item($i)->nodeName " => " $items->item($i)->nodeValue "<br />";

    Da Du in beiden XML Varianten den Buch Knoten hast, kannst Du mit dem DomNodeList Objekt relativ einfach den Elternknoten durchlaufen. Dazu auch einfach ins Manual schauen. In den User Kommentaren findet man geradezu Erstaunliches.
    MM Newmedia | MeinBlog

    Kommentar

    Lädt...
    X