Quelldatei adressen.xml:
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.
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 vom Element eintrag eingeschlossen sind.
Da es in diesem Beispiel genau 3 Elemente mit dem Namen eintrag haben, erhalten wir auch drei Ergebnisse
im Ergebnisarray.
<?php
require_once("../xml-line.php");
$mylines = new xml_line("xml-files/adressen.xml");
$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 ( [_@id] => 1 [_@datum] => 2002-05-24 [name] => Klausmann [vorname] => Heinz [anschrift] => [anschrift/strasse] => Feldstrasse 5 [anschrift/strasse@] => Array ( [info] => 3 x klingeln! ) [anschrift/strasse@info] => 3 x klingeln! [anschrift/plz] => 23456 [anschrift/ort] => Teststadt ) [1] => Array ( [_@id] => 2 [_@datum] => 2002-07-03 [name] => Meyer [name@] => Array ( [vorbestraft] => ja ) [name@vorbestraft] => ja [vorname] => Guste [anschrift] => [anschrift/strasse] => Tannh [anschrift/plz] => 98765 [anschrift/ort] => Nulldorf ) [2] => Array ( [_@id] => 3 [_@datum] => 2003-02-01 [name] => Katzbeck [vorname] => Karl-Heinz [anschrift] => [anschrift/strasse] => An der Teststrecke 123a [anschrift/plz] => 63555 [anschrift/ort] => Netzbach ) ) )
Besonderheit: Die Zuordung von Attributen geschieht so:
[name@vorbestraft]
Auch die Attribute des umschließenden Elements, in diesem Fall eintrag
sind in Version 0.4 verfügbar:
['_@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.
In Zukunft ist vorgesehen, auch diesen Fall zu berücksichtigen. Die Verwendung von geschachtelten Arrays soll aber auf jeden Fall vermieden werden.
Eine Möglichkeit, wie man mit einem Sonderfall dieses Problems umgehen kann, zeigt das Beispiel rename_element.php.
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.
Der Wert ist: Klausmann
Der Wert ist: Meyer
Der Wert ist: Katzbeck