Während PHP 5 die Funktion „simplexml_load_file()“ für das Arbeiten mit XML-Dokumenten bereitstellt, gestaltet sich die Verarbeitung und PHP 4 ungleich schwieriger. Dort gibt es zwar die DOM XML Funktionen wie besipielsweise „domxml_open_file()“ jedoch ist der Umgang mit ihnen alles andere als trivial.
Für viele Anwendungen wird es ausreichend sein, den Inhalt eines XML-Dokumentes auszulesen und für die spätere Ausgabe in einem mehrdimensionalen Array zu speichern. Wer auf das Bearbeiten des XML-Files verzichten kann – also nur lesend auf die Knoten zugreifen möchte, der sollte sich einmal das Code-Snippet auf den Webseiten von Bin-Co ansehen: http://www.bin-co.com/php/scripts/xml2array/
Nachdem man die Code-Zeilen in seinem Skript ergänzt hat, steht die einfache aber unglaublich nützliche Funktion xml2array() bereit. Die Funktion erzeugt einen XML-Parser, verarbeitet die XML-Daten und legt die gelesenen Knoten in einem Array ab.
Anwendung
<?php //Zunächst lädt man über die PHP-Funktion file_get_contents() den Inhalt der XML-Datei in eine Variable: $inhalt = file_get_contents('xmlfile.xml'); //Anschliessend schickt man den Inhalt durch den Parser und speichert das Ergebnis in einer neuen Variablen: $ergebnis = xml2array($inhalt) //$ergebnis enthült anschliessend alle Knoten und Attribute als mehrdimensionales Array. //Wer sein XML ohne Attribute aufbaut, kann mit folgender Anweisung deren Verarbeitung unterbinden: $ergebnis = xml2array($inhalt,0) ?>
Ein Beispiel
Das XML-Dokument
Folgendes XML-File verwende ich beispielsweise für die Erfassung meiner Webcodes (webcodes.xml):
<?xml version="1.0" encoding="iso-8859-1"?> <webcodes> <webcodeset> <code>WEB001</code> <name>Ein beliebiger Artikel</name> <description> Eine Beschreibung des beliebigen Artikels. </description> <url>http://www.andreherdling.de</url> </webcodeset> <webcodeset> <code>WEB002</code> <name>Ein anderer Artikel - ebenfalls beliebig</name> <description> Lorem ipsum und so weiter und so fort. Hier kann eine weitere Beschreibung stehen </description> <url>http://www.andreherdling.de</url> </webcodeset> </webcodes>
Das PHP-Skript für die Ausgabe:
Mit folgenden Codezeilen gebe ich z.B. den Inhalt des ersten Datensatz (webcodeset) aus:
<?php require_once('xml2array.php'); //ich habe das snippet von bin-co.com in einer extra Datei ausgelagert $inhalt = file_get_contents('webcodes.xml'); //XML-Datei einlesen $ergebnis = xml2array($inhalt, 0); //Ab zum Parsen (ich verzichte auf die Auswertung von Attributen, weil habe keine) //AUSGABE //Webcode echo $ergebnis['webcodes']['webcodeset'][0]['code']; //Name echo $ergebnis['webcodes']['webcodeset'][0]['name']; //Beschreibung echo $ergebnis['webcodes']['webcodeset'][0]['description']; //URL echo $ergebnis['webcodes']['webcodeset'][0]['url']; ?>
Um alle Datensätze der XML-Datei auszugeben, würde ich zuerst die Anzahl der Datensätze zählen lassen:
<?php $anzahl = count($ergebnis['webcodes']['webcodeset']); ?>
Wenn man dann die Anzahl der Datensätze kennt, kann man diese mit einer einfachen while()-Schleife durchlaufen. Für die Ausgabe der Daten kann es im Produktiveinsatz zudem sinnvoll sein, die Ausgabe mit htmlspecialchars() zu wandeln.
Das PHP-Snippet von bin-co.com kann also eine sinnvolle und vor allem einfache Lösung für die Arbeit mit XML-Dokumenten sein. In meinem Fall jedenfalls, haben mir diese paar Skriptzeilen aus der Patsche geholfen.
Thanks a lot to bin-co.com.