8.3 Laden, Parsen und Speichern von
XML in PHP 5
Das Laden und Parsen einer XML-Datei
wurde in PHP 5 komplett abgeändert. PHP 5 bietet zwei Methoden
zum Laden und Parsen der Klasse DomDocument
an:
Die Methode load()
dient zum Laden und Parsen von XML-Dateien, während loadxml()
XML-Dokumente parst, die als String vorliegen. Für das Speichern
von XML-Dokumenten existieren in PHP 5 ebenfalls zwei Methoden der
Klasse DomDocument:
Die Methode save()
speichert einen geparsten Dokumentenbaum als neue
XML-Datei, während savexml()
– der Name ist etwas unglücklich gewählt – den
Dokumentenbaum als String zurückgibt.
Hinweis: In PHP 5 wurde die Anzeige von Fehlermeldungen im Browser
abgeändert. Mit PHP 5 werden keine Fehlermeldungen mehr im
Browser angezeigt. Das ist für den Anwender sinnvoll, der
etwaige Fehler im PHP-Skript ohnehin nicht korrigieren kann, aber für
den Programmierer selbst etwas ungünstig, da einfache Fehler
(z.B. Datei nicht vorhanden, Semikolon vergessen usw.) nicht mehr
automatisch angezeigt werden. Um eine Anzeige von Fehlermeldungen im
Browser wie in PHP 4.x zu erhalten, muss in der php.ini-Datei der
Parameter display_errors
auf On
gesetzt werden. Standardmäßig ist dieser in PHP 5 auf Off
gesetzt.
8.3.1 XML-Dateien laden und parsen
Die Funktionen domxml_open_file()
und xmldocfile()
können Sie in PHP 5 zunächst nicht mehr einsetzen. Die
Klasse DomDocument
besitzt jetzt Methoden zum Laden und Speichern einer Datei. Nur über
diese Methoden ist ein Zugriff auf XML-Dateien möglich.
<?php
$dom = new DomDocument(); $dom->load("test.xml");
if(!$dom) { exit ("Fehler beim Parsen"); } ?>
Bevor eine XML-Datei geladen und
geparst werden kann, muss ein leerer Dokumentenbaum über die
Klasse DomDocument
erzeugt werden. Dies erfolgt über den Konstruktor der Klasse
DomDocument:
$dom
= new DomDocument();
Der Konstruktor wird wie in der
Programmiersprache Java über das Schlüsselwort new
und den Konstruktoraufruf (DomDocument())
eingesetzt. Der Konstruktoraufruf lautet in PHP 5 immer wie die
Klasse selbst. Bei diesem Konstruktor der Klasse DomDocument
handelt es sich zunächst um einen so genannten parameterlosen
Konstruktor, d.h. es wurden keine Übergabeparameter angegeben.
Daher kann er auch ohne Klammern notiert werden:
$dom
= new DomDocument;
Der Konstruktor kennt zwei mögliche
Übergabeparameter, die auch weggelassen werden können. An
den Konstruktor können die Versionsnummer von XML und der
Zeichensatz angegeben werden:
$dom
= new DomDocument("1.0","iso-8859-15");
Der erste Parameter gibt die
Versionssnummer von XML an und der zweite Parameter enthält den
Zeichensatz, dem das XML-Dokument zu Grunde liegt. Wird der erste
Parameter weggelassen, nimmt PHP immer die Versionssnummer 1.0 an.
Wird der zweite Parameter nicht angegeben, nimmt PHP immer den
Zeichensatz UTF-8 an.
Hinweis: Die Groß-Kleinschreibung bei einem DOM
XML-Konstruktor wird von PHP nicht berücksichtigt. Diese
Schreibweisen sind korrekt und werden akzeptiert:
$dom
= new domdocument();
$dom
= new domDocument();
$dom
= new Domdocument();
Der Rückgabewert des
Konstruktors ist ein Objekt der Klasse DomDocument.
Es enthält einen leeren Dokumentenbaum, der zunächst nur
über einen XML-Prolog verfügt. Über die Methode load()
der Klasse DomDocument
kann jetzt eine XML-Datei geladen und als Dokumentenbaum bereit
gestellt werden:
$dom->load("test.xml");
Zum Laden wird die neue Methode
load()
eingesetzt. Sie ersetzt im Prinzip die Methode domxml_open_file()
aus PHP 4.x. An die Methode load()
wird der Dateiname der XML-Datei übergeben. Die Datei wird jetzt
geladen und geparst. Bei einem Fehler in der XML-Datei wird kein
Dokumentenbaum erzeugt, sodass in einer if-Abfrage
auf den negativen Inhalt von $dom
geprüft werden kann:
if(!$dom)
{
exit
("Fehler beim Parsen");
}
Sollte die XML-Datei dagegen korrekt
geladen und geparst worden sein, liegt in $dom
der Dokumentenbaum vor, und über die Methoden von der Klasse
DomNode
bzw. DomDocument
sind die Inhalte zugänglich.
Pfadangaben beim Laden einer
XML-Datei
Beim Laden einer XML-Datei in PHP 4.x
unter Windows gab es das Problem, dass eine Datei, die ohne
Pfadangaben geladen wurde, aus dem Apache-Installationsverzeichnis
geladen wurde. Unter Linux und UNIX erfolgt das Laden aus dem
aktuellen Verzeichnis, in dem sich die PHP-Datei befindet. Daher muss
speziell für Windows beim Laden (und Speichern) die Funktion
dirname()
verwendet werden, damit die XML-Datei aus dem aktuellen Verzeichnis
geladen wird.
In PHP 5 unter Windows wurde dieses
Verhalten geändert. Wird an die load()-Methode
nur der Dateiname übergeben
$dom->load("test.xml");
wird jetzt die Datei immer aus dem
aktuellen Verzeichnis geladen. Im Prinzip ist die Verwendung von
dirname()
nicht mehr nötig. PHP 5 unter Linux bzw. UNIX zeigt das gleiche
Verhalten, das auch schon in PHP 4.x enthalten war.
Bultin Schemes
Die load()-Methode
enthält so genannte Builtin Schemes. Neben dem Laden einer
lokalen Datei können verschiedene Schemes angegeben werden, u.a.
http oder ftp. Dadurch können direkt XML-Dateien von anderen
Servern über diese Protokolle geladen werden:
$dom->load("http://www.xmlguru.de/test/test.xml");
Interessant ist auch die Möglichkeit,
direkt gezippte XML-Dateien in den Formaten gz und bzip2 anzugeben.
Diese werden beim Laden direkt entpackt und der Dokumentenbaum
erstellt:
$dom->load("compress.zlib://index.xml.gz");
Folgende Schemes werden von der
load()-Methode
unterstützt:
Nächster Schritt: XML-Dokumente als Strings
parsen
Hinweis: Dies ist ein Text von Michael Seeboerger-Weichselbaum. Es stammt aus dessem Buch "PHP & XML für Web-Developer" aus dem Software & Support-Verlag. Das Urheberrecht liegt bei Michael Seeboerger-Weichselbaum.
|