Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  3/2004  Pfeil  
suche: 

ORDIX News Archiv

Das IT-Magazin der ORDIX AG mit Fachbeiträgen zu Datenbanken, Unix und Java/XML.

Simples XML

In der neuen Version 5 bringt die Skriptsprache PHP eine Erweiterung, mit der sich XML-Dokumente ohne Probleme innerhalb von PHP verarbeiten, manipulieren und erstellen lassen.

Ist das wirklich neu?

Einige der PHP-begeisterten Leser werden jetzt vielleicht einwenden, dass es bislang doch auch möglich war, XML-Dokumente mit PHP einzulesen und zu bearbeiten. Richtig. Bis dato gab es einige Erweiterungen/Module, die sich um die Verarbeitung von XML-Dokumenten kümmerten.

Einige dieser Module haben es jedoch nie über das Beta-Stadium hinaus geschafft. Manchem Leser ist vielleicht die "expat"-Erweiterung ein Begriff, die bereits ab der PHP Version 3.0.6 zur Verfügung stand. Darüber hinaus wurde mehr oder weniger erfolgreich versucht, die libXML2 des Gnome-Projektes und die Nutzung des XSL-Prozessors Salbotron einzubinden.

Mit dem aktuellen Release wurde dem Modul- und Versions-Verwirrspiel dieser unterschiedlichen Ansätze ein Ende bereitet. Mit dieser Version bieten die PHP-Entwickler nun zwei Lösungsansätze für XML-Probleme.

Auf der einen Seite wurde die sehr mächtige und umfangreiche libXML2 komplett überarbeitet, neu strukturiert und direkt in PHP integriert. Dies bedeutet, dass diese XML-Funktionen fester Bestandteil von PHP geworden sind.

Auf der anderen Seite wurde für die alltägliche Arbeit mit XML eine Erweiterung geschaffen, die einfach zu erlernen und zu nutzen ist: SimpleXML. Diese Erweiterung soll im Folgenden näher beleuchtet werden.

Einfach lesen

SimpleXML zielt darauf ab, die Inhalte eines XML-Dokumentes möglichst effizient in einer Baumstruktur abzubilden und die Inhalte auf diese Art und Weise zur Verarbeitung anzubieten (DOM-Ansatz -> Document Object Model). Was bedeutet das genau? Schauen wir uns einfach mal Abbildung 1 an. Listing 1 zeigt ein einfaches XML-Dokument (mitarbeiter.xml), Listing 1a das PHP-Objekt, das SimpleXML daraus erstellt.

Abb. 1: Gegenüberstellung des XML-Dokuments und dem PHP-Objekt zur Verdeutlichung der strukturellen Ähnlichkeit.

Das beschriebene Dokument besitzt zwei Knoten (mitarbeiter), die ihrerseits wiederum vier Elemente (name, vorname, firma, geschaeftsstelle) beinhalten. Zusätzlich wurde das Element "name" um das Attribut "id" erweitert, das die Mitarbeiternummer beinhaltet.

Ziel der SimpleXML-Erweiterung ist es, diese strukturiert hinterlegten Informationen aus dem XML-Dokument in ein PHP-Objekt zu überführen, um somit dem Programmierer einen möglichst eleganten und vor allem gewohnten Zugriff zu gewährleisten. Um dies zu tun, muss das XML-Dokument über einen Funktionsaufruf gelesen werden (Listing 2).

Listing 2: Zugriff auf die Elemente in PHP.

Simplexml_load_file(FILE) ist die Funktion, die das angegebene XML-Dokument einliest und dessen Inhalte in dem Objekt $data für die weitere Verarbeitung zur Verfügung stellt. Die beiden Print-Funktionen geben in diesem Fall den Vornamen und Namen des zweiten Mitarbeiters aus.

Wie auch in anderen Programmiersprachen üblich, beginnt die Zählweise der Knoten bei 0. Für die Konvertierung der Inhalte von UTF-8 nach ISO-8859-1 sorgt die Funktion utf8_decode(). Obwohl das XML-Dokument bereits die entsprechende Kodierung besaß, ist das Ausführen dieser Funktion notwendig, da die Funktion simplexml_load_file(FILE) für ihre Ausgaben standardmäßig UTF-8 nutzt. Sonderzeichen (z. B. Umlaute) werden ohne dieses Vorgehen nicht richtig dargestellt. Mögliche Attribute eines Elementes werden in Form eines Arrays geliefert, so dass für die Ausgabe des Attributes "Personalnummer" die in Listing 3 gezeigte Anweisung genutzt werden muss.

Listing 3: Attribute eines Elements werden über ein Array zur Verfügung gestellt.

Einfach schreiben

Natürlich kann PHP nicht nur XML-Code lesen, sondern auch schreiben. Als Programmierer muss man nur dafür Sorge tragen, dass die gewünschten Informationen, die als XML ausgegeben werden sollen, entsprechend der allgemein gültigen XML-Syntax formatiert sind. Listing 4 zeigt ein Beispiel, das aus einer MySQL-Tabelle (mitarbeiter) ein XML-Dokument erzeugt.

Listing 4: Das Erstellen eines XML-Dokumentes ist recht simpel. Auch hier ist beim Speichern an die UTF-8 Kodierung zu denken.

Es können jedoch nicht nur neue Dokumente erzeugt, sondern auch bestehende Dokumente verändert werden. Veränderung bedeutet, dass SimpleXML bestehende Elemente und Attribute mit neuen Werten belegen kann. Ein kleiner Wermutstropfen ist die Tatsache, dass lediglich neue Attribute hinzugefügt werden können. Eine Erweiterung um Knoten oder Elemente ist auf diese Art und Weise (momentan) nicht zu bewerkstelligen (siehe Listing 5).

Listing 5: Daten modifizieren – Elemente und Attribute lassen sich sehr schnell anpassen.

XML für einfach alles?

SimpleXML ist sicherlich geeignet, um vielen (Web-)Entwicklern das tägliche Leben zu erleichtern. Mit keiner anderen Erweiterung lassen sich die Daten aus XML-Dokumenten so schnell und komfortabel extrahieren und weiterverarbeiten. Sicherlich wird dem einen oder anderen "XML-Heavy-User" der Funktionsumfang nicht genügen. Dieser sollte sich dann eher der nun komplett überarbeiteten und umfangreicheren libXML2 zuwenden.

Die Einarbeitungszeit und Nutzung dieser Erweiterung ist jedoch deutlich aufwändiger und bringt nur in extremen Anwendungssituationen, wie z. B. der Erstellung und Validierung von komplexen XML-Dokumenten, einen deutlichen Mehrwert.

Matthias Jung (info@ordix.de).