XML in Tabellenstruktur einlesen

Methode: get_record()

Diese Methode ist besonders dazu gedacht, einen schnellen Zugriff auf XML-Dateien zu erhalten, die im Grunde flache Tabellen sind, und eventuell sogar nichts anderes als ein XML-Export aus einer Datenbanktabelle oder Tabellenkalkulation sind.

<?xml version="1.0" encoding="ISO-8859-1"?>
<adressen>
  -  <eintrag id="1" datum="2002-05-24">
  -     -  <name>Klausmann</name>
  -     -  <vorname>Heinz</vorname>
  -     -  <anschrift>
  -     -     -  <strasse info="3 x klingeln!">Feldstrasse 5</strasse>
  -     -     -  <plz>23456</plz>
  -     -     -  <ort>Teststadt</ort>
  -     -  </anschrift>
  -  </eintrag>
  -  <eintrag id="2" datum="2002-07-03">
  -     -  <name>Meyer</name>
  -     -  <vorname>Guste</vorname>
  -     -  <anschrift>
  -     -     -  <strasse>Tannhäuserweg 12</strasse>
  -     -     -  <plz>98765</plz>
  -     -     -  <ort>Nulldorf</ort>
  -     -  </anschrift>
  -  </eintrag>
  -  <eintrag id="3" datum="2003-02-01">
  -     -  <name>Katzbeck</name>
  -     -  <vorname>Karl-Heinz</vorname>
  -     -  <anschrift>
  -     -     -  <strasse>An der Teststrecke 123a</strasse>
  -     -     -  <plz>63555</plz>
  -     -     -  <ort>Netzbach</ort>
  -     -  </anschrift>
  -  </eintrag>
</adressen>

Dieses Beispiel macht es sich etwas schwerer, da auch Attribute und sogar ein Element mit untergeordneten Elementen enthalten sind.

Aufgabe: Alle Datensätze aus der Datei adressen.xml einlesen, die mit dem Tag eintrag eingeschlossen sind.


<?php
require_once("../xml-line.php");
$mylines = new xml_line("xml-files/adressen.xml", "hixml");
$mylines->get_record(0,"eintrag");
$mylines->xml_stream();
print $mylines->get_output();
?>

Ergebnis-Array:


<?php
echo "<pre>";
print_r($mylines->table_result);
echo "</pre>";
?>

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [name] => Klausmann
                    [vorname] => Heinz
                    [anschrift/strasse] => Feldstrasse 5
                    [anschrift/strasse@info] => 3 x klingeln!
                    [anschrift/plz] => 23456
                    [anschrift/ort] => Teststadt
                )

            [1] => Array
                (
                    [name] => Meyer
                    [vorname] => Guste
                    [anschrift/strasse] => Tannhäuserweg 12
                    [anschrift/plz] => 98765
                    [anschrift/ort] => Nulldorf
                )

            [2] => Array
                (
                    [name] => Katzbeck
                    [vorname] => Karl-Heinz
                    [anschrift/strasse] => An der Teststrecke 123a
                    [anschrift/plz] => 63555
                    [anschrift/ort] => Netzbach
                )

        )

)

Besonderheit: Die Zuordung von Attributen geschieht folgendermaßen:
['eintrag@datum']

Enthält ein Element des Datensatzes ein weiteres Element, wird dies folgendermaßen in die Tabellenstruktur eingegliedert:
['anschrift/strasse']

Die get-record-Methode hat natürlich ihre Grenzen und eignet sich vor allem für Tabellen- oder Datenbankexporte. Wie in einer Datenbanktabelle muss jede Spalte einen anderen Namen haben. Würde hier ein gleichnamiges Element auftauchen, würde der vorige Wert überschrieben werden.

Zugriff auf einzelne Werte:

Aufgabe: Welchen Wert hat das Element name im zweiten Datensatz? Das Ergebnis-Array steckt in der Variablen table_result.


<?php
printf("<p>Der Wert ist: <b>%s</b></p>",
       $mylines->table_result[0][1]['name']);
?>

Der Wert ist: Meyer

Noch einmal zur Erinnerung: Der erste Index zählt die aufgerufenen Methoden. In diesem Beispiel gibt es nur die eine, also [0]. Der Index [1] ist das zweite zurückgelieferte Ergebnis, da wir auch hier bei 0 anfangen zu zählen.