7. September 2007 XSLT als Template Engine in PHP - Teil 4

in Kategorie PHP, XML & Co

Tags: , , , ,


Im letzten Beitrag dieser Reihe wurde der Aufbau der XSL–Stylesheets besprochen, um sie effektiv als Templateengine einsetzen zu können. Danach haben wir das Stylesheet mit einer XML–Datei verlinkt und ein passender Browser konnte dann die XHTML–Ausgabe generieren. Da aber nicht jeder Internetnutzer über einer Browser auf unsere Seite kommen wird, der auch XSLT beherrscht, sollte diese Aufgabe bereits vom Webserver übernommen werden.

Die XSL Extension

Seit PHP5 ist die XSL Extension standardmäßig enthalten und stellt ein mächtig Werkzeug dar, um XSL–Transformationen durchzuführen. Die XSL Extension verwendet hierfür übrigens die »libxslt« Bibliothek.

Looking at the overall graphs, it is clear that libxslt is by far the fastest performing processor

XSLT benchmarks, davidpashley.com

Libxslt ist nicht nur ziemlich schnell sondern unterstützt auch weite Teile des XSLT– und XPath–Standards. Allein die Tatsache, dass sich das Herzstück unserer Templateengine in C–Code befindet und nicht wie zum Beispiel bei Smarty alle Operationen in PHP selbst durchgeführt werden müssen, lässt schon erahnen, dass XSLT einen nicht unerheblichen Geschwindigkeitsvorteil bringen wird.

Der XSLT Prozessor im Einsatz

Nun werden wir das Beispiel vom letzten mal auf den XSLT Prozessor übertragen. An den drei Dateien »root.xsl«, »home.xsl«, »home.xml« müssen wir eigentlich nichts verändern. Den Link zum Stylesheet in »home.xml« könnten wir uns jetzt auch sparen. Er stört aber nicht weiter.

Um die Transformation nun serverseitig durchzuführen erstellen wir ein PHP–Script, welches den XSLT Prozessor mit den Dateien »home.xsl« und »home.xml« aufruft:

<?php
$xp = new XsltProcessor;
 
$xsl = new DOMDocument;
$xsl->load('home.xsl');
$xp->importStylesheet($xsl);
 
$xml = new DOMDocument;
$xml->load('home.xml');
 
$output = $xp->transformToXML($xml) or die('Transformation error!');
 
echo $output;
?>

Erstaunlich kurz das Ganze, nicht wahr? Bevor die eigentliche Transformation mit »transformToXML« ausgeführt werden kann laden wir die home.xml und das dazugehörige Stylesheet. Genauso gut könnte man diese Informationen dynamisch generieren anstatt sie aus einer Datei zu laden. Das Root–Stylesheet wird übrigens nach wie vor aus dem Home–Stylesheet heraus eingebunden. Anschließend müssen wir den generierten Output nur noch ausgeben.

Fazit

Die XSL Extension bietet vielfältige Einsatzmöglichkeiten, da sie mit der DOM Extension zusammenarbeitet. Außerdem gestaltet sich die Anwendung äußerst simpel. Weitere Informationen zum XSLT Prozessor gibt es unter php.net/xsl. Das Beispiel aus diesem Beitrag gibt es als Zip–Packet zum Download:

Im nächsten Beitrag werden ich auf einige Besonderheiten besprechen, die bei XSLT im Einsatz als Templateengine auftreten.

weiter zum fünften Teil dieser Beitragsreihe »

Ähnliche Artikel


Der Beitrag wurde am Freitag, den 7. September 2007 um 14:49 Uhr veröffentlicht und wurde unter PHP, XML & Co abgelegt. du kannst die Kommentare zu diesen Eintrag durch den RSS 2.0 Feed verfolgen. du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.

Kommentare

  1. Am 7. September 2007 um 20:32 Uhr
    butters gravatar

    hallo,

    ich habe gerade die xslt-template-reihe gelesen, und muss sagen, das ich xslt als templateenginge für webseiten recht unpraktisch finde. zumindest für den designer, ich als programmierer, komme damit zwar zurecht, seh den sinn von xslts vor allem aber in dem austausch von daten zwischen verschiedenen applikationen. für “geradlinige” webprojekte, wie “digg” mag sowas noch gehen, aber nicht wenns “bunter” wird. php und die div. templateenginge leben ja gerade von der leichtfüssigkeit, schliesslich verwendet man dann ja auch kein java.

    gruß, butters

    ps wurde vom autor die xsltgeschichte für was richtig großes verwendet?

    pps jm2c

  2. Am 8. September 2007 um 09:07 Uhr
    Mario Volke gravatar

    Hallo butters,

    also das ein Designer Probleme mit XSL haben könnte, da stimme ich dir natürlich zu. Aber nicht jedes Projekt läuft so ab, dass dein Designer sämtliches templating übernimmt. Aber in einem Punkt muss ich dir widersprechen: Gerade bei großen Webseiten kann es Sinn machen XSLT einzusetzen.

    Übrigens habe ich die in diesen Beiträgen vorgestellte Technik in meinem Projekt sudokular.com eingesetzt. Eines stellt sich beim Einsatz schnell heraus: XSLT ist dann gut zu gebrauchen, wenn das PHP Backend gut strukturiert ist am besten geht das mit OOP und nem guten Framework. Der eigentliche Vorteil von XSLT besteht dann darin, dass ich meine Inhalte wirklich frei mischen kann, wie ich es gerade benötige. Ich kann mir Feeds zusammenbauen, XHTML Output generieren, usw.

    Was übrigens auch sehr gut funktioniert ist die Mehrsprachigkeit mit XSLT umzusetzten. Dazu aber mehr im 6. Teil :-)

    Gruß
    Mario

  3. Am 3. Januar 2008 um 00:05 Uhr
    Björn Schimpf gravatar

    Wir entwickeln seit 2001 ein CMS auf der Basis von XML/XSLT. Erst mit Sablotron, und jetzt natürlich libxslt. Ich sehe den Hauptvorteil in der Granularität von XML/ XSLT, in welcher templatesprache kann ich schon sagen gib mir alle i-Tags als em-Tags aus (in dem vom Benutzer über fck eingegebenen xhtml)

    Tolle Tutorials, Gruss Björn

Einen Kommentar schreiben