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.
|