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.