XML unter PHP 4.x verarbeiten

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($inhalt0); //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.


Weiterführende Informationen:

http://www.bin-co.com/php/scripts/xml2array/