11.15 XSLT in PHP 5

PHP 5 unterstützt wie PHP 4.x XSLT. In PHP 5 wurde die Verwendung von XSLT komplett erneuert, sodass die Codes für PHP 4.x unter PHP 5 nicht funktionieren. In diesem Abschnitt werden die Neuerungen und Änderungen detailliert besprochen.

In PHP 5 kann wie in PHP 4.x in jedes beliebige textbasierte Ausgabeformat (HTML, XHTML, CSV, SVG, WML, usw.) geformt werden. Die XML- und XSLT-Beispiele aus diesem Kapitel funktionieren auch mit PHP 5, wenn der PHP-Code von der 4er- auf die 5er-Version umgestellt wird.

Die Unterschiede zwischen XSLT in PHP 4.x und PHP 5 sind die folgenden:

  • PHP 5 führt die Klasse XsltProcessor ein, über die Formungen durchgeführt werden.

  • Die XML- und XSLT-Dateien müssen als ein Objekt der Klasse DomDocument aus DOM XML vorliegen.

  • Die XSLT-Funktionen aus PHP 4.x sind unter PHP 5 nicht verwendbar.

Statt die XSLT-Funktionen wie xslt_process() oder xslt_free() aus PHP 4.x zu verwenden, führt PHP 5 die Klasse XsltProcessor ein. Über die Methoden dieser Klasse erfolgt die Formung in ein gewünschtes Ausgabeformat. Bis zum Redaktionsschluss des Buches (Ende Juli 2004) enthält die Klasse nur die wichtigsten Methoden zum Formen. Methoden, wie beispielsweise die Funktionen xslt_openlog(), xslt_set_base() oder xslt_free() aus PHP 4.x stehen über ähnliche Methode nicht zur Verfügung.

11.15.1 Eine Formung mit PHP 5

Für die Formung mit Hilfe von PHP 5 müssen zuerst die XML- und die XSLT-Datei als ein Objekt der Klasse DomDocument vorliegen. Beide Dateien müssen vorher über DOM XML geladen und geparst werden. Dies ist anders als in PHP 4.x, wo ja über die Funktion xslt_process() die direkten Dateinamen angegeben wurden. Der nachfolgende Code basiert auf dem Beispiel von Kapitel 11.3. Die prozentuale Verteilung der Server wird nach HTML geformt. Das mit PHP 5 geformte Ergebnis unterscheidet sich nicht von der Formung mit PHP 4.x.

<?php
$xml = new DomDocument();
$xml->load("server.xml");
if(!$xml) {
exit ("Fehler beim Parsen");
}
$xslt= new DomDocument();
$xslt->load("html.xsl");
if(!$xslt) {
print ("Fehler beim Parsen");
exit();
}
$xsltproc = new XsltProcessor();
if(!$xsltproc) {
exit ("Fehler beim Erstellen des XSLT-Prozessors");
}
$xsltproc ->importStylesheet($xslt);
print ($xsltproc ->transformToXml($xml));
?>

Zuerst wird die XML-Datei geladen und geparst. Sie liegt in $xml als ein Objekt der Klasse DomDocument vor. Anschließend wird die XSLT-Datei geladen sowie geparst und liegt in $xslt ebenfalls als ein DomDocument-Objekt vor. Für die Formung muss ein Objekt der Klasse XsltProcessor erzeugt werden. Dies geschieht über den Konstruktor dieser Klasse:

$xsltproc = new XsltProcessor();

Der Konstruktor ist parameterlos. Der Aufruf des Konstruktors ist nötig, um ein Objekt dieser Klasse zu erstellen. Über die Methoden dieser Klasse erfolgt die konkrete Formung. Dazu muss die XSLT-Datei angegeben werden, die die Formung in das Ausgabeformat vornimmt. Dies erfolgt über die Methode importStylesheet(), die nicht die XSLT-Datei, sondern das entsprechende Objekt der DomDocument-Klasse angibt, das die XSLT-Datei enthält (hier ist es $xslt):

$xsltproc ->importStylesheet($xslt);

Die Formung erfolgt über die Methode transformToXml(). An die Methode wird die zu formende XML-Datei angeben. Jedoch auch nicht als Dateiname, sondern als Objekt der Document-Klasse (hier $xml):

print ($xsltproc ->transformToXml($xml));

Der Rückgabewert der Methode transformToXml() ist ein String, der das geformte Ergebnis enthält. Der Name der Methode ist etwas unschön, ist aber genau richtig für ein Formen on-the-fly.



Nächster Schritt: In eine Datei formen

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.



© msw 1999-2005