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.

Diese Anleitung wurde 2008 für PHP4 verfasst, was heute veraltet ist. Wer XML in PHP5 verarbeiten möchte, sollte sich die Funktion simplexml_load_file() mal näher anschauen.

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.

Weiterführende Informationen:

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

Schreibe einen Kommentar

Personenbezogene Daten interessieren mich nicht – daher ist die Angabe von Name und E-Mail-Adresse freiwillig. Jedoch wird jeder Kommentar von mir geprüft, bevor er freigeschalten wird.