XML-Line

Eine PHP-Klasse
für die Abfrage und Änderung von XML-Dokumenten

Autor: Peter Bieling © 2004-2008

 1  Was ist XML-Line?

XML-Line ist eine PHP-Klasse, die eine komfortable Nutzung der in PHP integrierten [externer Link]Expat-Parserfunktionen erlaubt. ([externer Link]Expat wurde von James Clark in C geschrieben und wird nicht nur von PHP genutzt.)
Auch wenn sich die XML-Line noch in der Entwicklung befindet, lässt sie sich die Klasse für viele Aufgabenstellungen bereits problemlos nutzen.

Durch die Expat-Funktionen verfügt PHP über eine schnelle Möglichkeit zum Parsen von XML. Die Nutzung der von Parser gefundenen Daten ist jedoch mit erheblichem Programmieraufwand verbunden, denn Expat selbst stellt keine Funktionen für die Weiterverarbeitung der Daten zur Verfügung. XML-Line dient als komfortable Schnittstelle zwischen den Parser-Funktionen und der Anwendung, die auf XML-Dokumente zugreifen will.

Der Name XML-Line will ausdrücken, dass die Parserergebnisse nicht in eine Baumstruktur überführt werden sondern in einer linearen, sich laufend aktualisierenden Struktur bereit gehalten werden. Vereinfacht ausgedrückt kann man sagen, dass eine XML-Datei zeilenweise abgearbeitet wird. Auch diese Betrachtungsweise spiegelt sich im Namen XML-Line wider.

 2  Wofür kann man XML-Line verwenden?

Beispiele für die Anwendung von XML-Line:

  1. Ändern, Löschen und Hinzufügen von Werten, Elementen und Attributen in XML-Dokumenten
  2. Datenbankähnliche Abfrage von XML-Dateien
  3. Aktualisieren von XHTML-Seiten im Web
  4. Manipulation von XML-basierten Webformaten wie z.B. RSS und SGV
  5. Darstellung von XML-Dateien

Zu 1: Ein Vorzug von XML ist die Trennung der Inhalte von ihre Präsentation, was eine vielfältige Datennutzung erlaubt. Darüber hinaus bietet XML die Möglichkeit der menschenlesbaren Beschreibung komplexer Strukturen. Dadurch wird jedoch die maschinelle Verarbeitung der Daten erschwert. Um auch mit dem vorteilhaften XML-Format komfortabel arbeiten zu können, ist im Vorfeld viel Aufwand nötig. XML-Line erlaubt dem Web-Entwickler den einfachen Zugriff auf XML-Dokumente mit Hilfe der Expat-Parserfunktionen, ohne ihn mit dem Vorgang des Parsens zu behelligen. Er kann sich auf seine eigentlichen Aufgaben konzentrieren.

Zu 2: Ähnlich wie in einer Datenbanktabelle, lassen sich auch in einem XML-Dokument Daten lesen, ändern und auch löschen. Die Suchmöglichkeiten sind sehr vielfältig. Auch ein Umbau der XML-Struktur z.B. durch Hinzufügen oder Löschen von Elementen und Attributen ist möglich. Für das Einlesen von ganzen Datensätzen aus XML-Dateien mit entsprechender Struktur gibt es eine eigene Methode.

Zu 3: Webseiten die im gültigen XHTML-Format geschrieben sind, sind gleichzeitig gültige XML-Dokumente und können daher auch mit XML-Line verarbeitet werden.

Zu 4: Natürlich lassen sich auch andere XML-basierte Formate im Web einlesen und manipulieren. Die Filterung von RSS-Feeds, um bestimmte Themen zu finden, ist nur ein Beispiel.

Zu 5: Gerade bei der Anwendungsentwicklung kann eine Funktionalität nützlich sein, die XML-Code aufgeräumt und mit Syntax-Highlighting versehen darstellt. XML-Line bietet diese Option.

Navigation

 3  Wo bekomme ich XML-Line?

XML-Line 0.4.3 alpha ist jetzt verfügbar. Mit Klick auf den Link erfahren Sie anhand von Beispielen mehr über die erweiterten Möglichkeiten der PHP-Klasse und gelangen zum Downloadlink.

Die letzte stabile Version 0.3 liegt weiterhin unter http://www.media-palette.de/xml-line.zip zum Download bereit.

Navigation

 4  Was kostet XML-Line?

Die Klasse ist kostenlos. Auskunft über die Nutzungsmöglichkeiten gibt die LGPL. Garantien für die Nützlichkeit und Fehlerfreiheit der Klasse, der Dokumentation und der Beispiele werden ausdrücklich nicht gegeben. Weitere Hinweise finden Sie im Quelltext der Klasse.

Navigation

 5  Wie arbeitet XML-Line?

Es gibt grundsätzlich zwei Arten von XML-Parsern: tree-basierte und event-basierte Parser. Die erste Gruppe liest das gesamte Dokument in eine vom Programm verwertbare Struktur. Expat, als Vertreter der zweiten Gruppe, arbeitet event-basiert. Es liest das Dokument abschnittsweie und stellt Daten über gefundene Tags und Attribute bereit. XML-Line wertet diese Daten mit Hilfe der vom Benutzer in seinem PHP-Skript aufgerufenen Methoden aus. Während eines Dateidurchlaufs sind beliebig viele Operationen möglich.

XML-Line behält im Idealfall nur die Daten, die benötigt werden. So lassen sich auch sehr große XML-Dokumente in den Griff bekommen. Ein Nachteil soll nicht verschwiegen werden:
Durch die eventbasierte Methode sind Manipulationen bereits durchlaufener Elemente nur mit einem zweiten Durchlauf der Datei möglich. Je nach Aufgabenstellung überwiegen aber dennoch die Vorteile dieser handlichen Parserklasse.

Navigation

 6  Alternativen zu XML-Line

XML-Line ist natürlich nicht das einzige Werkzeug für die Nutzung von XML-Dokumenten durch PHP. Je nach Aufgabenstellung muss jeder Entwickler selbst entscheiden, welches Programm oder Skript er verwendet.

Wem die Funktionalität von XML-Line nicht ausreicht, hat natürlich nach wie vor die Möglichkeit, die Expat-Funktionen direkt zu nutzen oder mit [externer Link]xml_parse_into_struct einen XML-Tree zu bauen, den er nach Belieben durchsuchen und umformen kann. Das erfordert natürlich genaue Kenntnisse der Funktionen. (Das parse_into_struct() mit zwei Arrays arbeitet, kann die Übersicht schnell verloren gehen.)

Wenn es darum geht, XML in HTML oder andere XML-basierte Sprachen zu transformieren, kann man dafür entweder [externer Link]XSLT + Sablotron oder das von manchen PHP-Experten favorisierte [externer Link]XML-Transformer (PEAR-Paket) verwenden.

Die [externer Link]DOM-XML-Funktionen in PHP bieten die umfassendsten Möglichkeiten mit Hilfe der [externer Link]XPath-Syntax auf einen XML-Tree zuzugreifen. Für XML-Projekte, die XML voll ausreizen sollen, erscheinen mir diese Funktionen sehr vielversprechend. Für die alltägliche Webentwicklung sind sie jedoch überproportioniert. Das Handbuch weist zudem darauf hin, dass diese Erweiterung noch experimentell ist. Damit die Funktionen genutzt werden können, muss die GNOME_XML_library verfügbar sein. Wer für seine Onlineprojekte keinen eigenen Server hat, kann mit DOM-XML nur dann arbeiten, wenn es der Provider bereitstellt. XML-Line bietet vieles, was mit DOM-XML-Funktionen möglich ist.

Für PHP 5 ist DOM-XML komplett integriert, so dass die oben genannten technischen Einschränkungen nicht gelten.

Für den schnellen Alltagseinsatz sollen künftig die neuen [externer Link]SimpleXML-Funktionen von PHP 5 das notwendige Werkzeug bereitstellen. Ob XML-Line damit überflüssig wird, ist wegen dessen großen Funktionsumfangs und der mindestens ebenso simplen Handhabung fraglich. Wer PHP 5 nutzen kann, sollte prüfen, ob er mit SimpleXML zurecht kommt, und so die Einbindung einer Klasse ersparen kann. Dies wird eher dann der Fall sein, wenn es um das reine Auslesen von Daten geht. Manipulation von XML-Dateien ist dagegen nur sehr eingeschränkt möglich.

Während der Arbeiten an XML-Line wurde ich durch einen Mailinglistenbeitrag auf [externer Link]KXParse von Khalid Al-Kary aufmerksam. Die Idee des Elementzählpfads als eigener Parameter (anders als in XPath), mit dem sich jedes Element gezielt ansprechen lässt, habe ich übernommen. KXParse erzeugt jedoch einen XML-Tree und hat dadurch einen höheren Speicher- und Zeitbedarf bei größeren Dateien. Bei kleinen Dateien fällt dieser Nachteil nicht weiter ins Gewicht. Der Autor nennt seine Klasse selbst A very light XML Parser! Die Möglichkeiten sind dementsprechend eingeschränkt und auf die Weiterentwicklung verzichtet der Autor zugunsten eines neuen Projekts.

Hinweisen möchte ich auch noch auf das [externer Link]Active XML Package, das ebenfalls tree-basiert arbeitet und die Aufgaben auf mehrere Klassen verteilt, die dann nach Bedarf miteinander verknüpft werden. Mir persönlich ist das Konzept zu umständlich. Vielleicht sucht aber jemand gerade eine spezielle Methode, die dieses Paket möglicherweise bietet.

Sehr vielversprechend scheint mir [externer Link]DOMIT von John Heinstein zu sein. Auch wenn ich die Klasse aus Zeitgründen noch nicht ausführlich testen konnte, möchte ich sie wenigstens erwähnen. Der Autor schreibt:
DOMIT! is an XML parser that is consistent with the Core Document Object Model (DOM) Level 1 specification.
It has been designed for speed and ease of use. DOMIT is non-validating, but as of version 0.7 handles xml declarations, DocumentTypes, DocumentFragments, CharacterData, Comments,and ProcessingInstructions.
DOMIT! is not an extension and is therefore deployable in any web hosting environment that supports PHP 4+.

Navigation

 7  Tutorial und Beispiele

Das Tutorial ist jetzt im HTML-Format online verfügbar, liegt aber auch dem Downloadpaket bei. Außerdem gibt es eine aus dem Quelltext gewonnene Dokumentation im PDF-Format. Auch diese ist in der zip-Datei enthalten, ebenso wie ein examples-Verzeichnis mit verschiedenen Anwendungsbeispielen. Diese Beispiele gibt es zur Zeit nur in der Offline-Version. Das Tutorial ist noch auf dem Stand der Version 0.2. Eine gründliche Aktualisierung ist für Version 0.4 geplant.

Navigation

 8  Nachrichten über Updates

Aktuelle Meldungen über XML-Line erhalten Sie über den RSS-Feed von www.media-palette.de XML, der auch über die News-Seite gelesen werden kann. Hier erfahren Sie sofort, wenn es Updates oder neue Beispiele gibt.

Navigation

 9  Danksagung

Mein Dank geht an alle, die zum Thema XML publiziert haben und deren Veröffentlichungen mir bei der Entwicklung dieser Klasse geholfen haben. Namentlich möchte ich mich bei [externer Link]Harald Seffers bedanken, der mir mit geduldiger und konstruktiver Kritik geholfen hat, nicht nur XML-Line sondern auch diese Einführungsseite zu verbessern.

Für sachliche Kritik, Anregungen und Rückmeldungen bin ich stets dankbar. Nachrichten senden Sie bitte nach Möglichkeit über mein Kontaktformular.

Navigation