| |
| * Link führt ins Internet |
|
| |
Verwendung von XSLT mit PHP
|
|
XSLT (XSL Transformations) spielt eine wichtige Rolle bei der Transformation und Präsentation von XML-Dokumenten. Die Leistungsfähigkeit, die XSLT für PHP-Anwendungen bietet, lässt sich am besten anhand von Beispielen demonstrieren. Für die Beispiele wurde hier Version 4.3.3 von PHP verwendet. Hierbei ist zu berücksichtigen, dass diese Erweiterung in PHP kompiliert werden muss, bevor die Beispiele ausgeführt werden können.
Es gibt zwei Beispieldateien, die für die folgenden Beispiele verwendet werden. Zum Einen gibt es eine simple XML-Datei mit dem Namen adressen.xml. Zum Anderen gibt es eine simple XSLT-Datei mit dem Namen adressen.xslt. Die Beispiele setzen voraus, dass diese beiden Beispiele im gleichen Verzeichnis gespeichert werden, in dem auch das PHP-Skript selbst steht.
Inhalt adressen.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="example.xslt"?>
<person>
<name>
<vorame>Matthias</vorname>
<zuname>Volkan</zuname>
<nachname>Kannengiesser</nachname>
</name>
<email>matthiask@atomicscript.de</email>
<telefon>
<home>123-123-123-123</home>
<mobil>321-321-321-321</mobil>
</telefon>
<beruf>Informatiker</beruf>
<aufgabe>PHP Developer</aufgabe>
</person>
Inhalt adressen.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="date" select="2004"/>
<xsl:template match="/person">
<html>
<head>
<title>XML und XSLT Beispiel</title>
</head>
<body>
<table>
<tr>
<td>Personal Information:</td>
<td><xsl:value-of select="name/vorname" /></td>
<td><xsl:value-of select="name/zuname" /></td>
<td><xsl:value-of select="name/nachname" /></td>
</tr>
<tr>
<td>Email Address:</td>
<td colspan="3"><xsl:value-of select="email" /></td>
</tr>
<tr>
<td>Department:</td>
<td colspan="3"><xsl:value-of select="beruf" /></td>
</tr>
<tr>
<td>Position:</td>
<td colspan="3"><xsl:value-of select="aufgabe"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
|
Bevor Sie jedoch los legen können, sollten wir noch überprüfen ob die DOM-Erweiterung zur Verfügung steht, da deren Funktionen zur Verarbeitung von komplexen XML-Strukturen eine wesentliche Erleichterung darstellen.
Vorraussetzungen
Um die DOM XML-Funktionen erfolgreich ausführen zu können müssen Sie PHP mit der Option --with-dom kompilieren. Windows Nutzer entfernen zur Aktivierung dieser Erweiterung das Semikolon vor dem Eintrag extension=php_domxml.dll innerhalb der php.ini. Für ein einwandfreies Arbeiten benötigen Sie zusätzlich die GNOME XML Library, ab Version 2.4.14. Sie finden die aktuelle Version für Ihr Betriebssystem unter der folgenden Adresse: www.xmlsoft.org. Windows Nutzer sollten diese Bibliothek in das Systemverzeichnis kopieren.
Welche Version Sie aktuell verwenden, können Sie mit der Funktion domxml_version() ermitteln:
print_r(domxml_version());
|
DOM-, XML- und XSLT im Einsatz
Das erste Beispiel ist eine Demonstration der vier Basisfunktionen, die für eine XSLT-Transformation über die DOM-Erweiterung stattfinden müssen. An dieser Stelle soll der Code einmal genauer betrachtet werden:
<?php
// Erezugt ein DomDocument-Objekt unter Verwendung eines
// XML-Dokuments
if(!$domXmlObj = domxml_open_file("adressen.xml")) {
die("XML-Dokument kann nicht geparst werden!");
}
// Erzeugt ein DOMDocument-Objekt unter Verwendung eines
// XSLT-Dokuments
$domXsltObj = domxml_xslt_stylesheet_file("example.xslt");
// Erzeugt ein DOMDocument-Objekt welcher sich aus
// der Transformation eines XML- und XSLT-Dokument ergibt
$domTranObj = $domXsltObj->process($domXmlObj);
// Gibt die Daten aus dem transformierten Objekt aus
echo $domXsltObj->result_dump_mem($domTranObj);
?>
|
Die Meisten der DOM XSLT-Funktionen befassen sich mit dem Erstellen, Löschen, und Modifizieren von DOMDocument-Objekten. Die erste hier verwendete Funktion ist die Funktion domxml_open_file(). Sie erstellt ein DOM-Objekt aus der vorhandenen XML-Datei. Die nächste aufgerufene Funktion ist domxml_xslt_stylesheet_file(), die eine neues DOMXSLTStylesheet-Objekt erzeugt. Dieses Objekt wird später bei der Transformation des XML- und XSLT-Dokuments verwendet, durch die der HTML-Output erstellt wird.
Es folgt die Prozessfunktion des DOMXSLTStylesheet-Objekts. Sie verwendet ein oder mehr Argumente; das erste Argument muss das DomDocument-Objekt sein. Dieses wendet die XSLT-Transformation auf das DOMDocument an, das ihm übergeben wird. Der Prozessfunktion können weitere Argumente übergeben werden; dabei kann es sich um zusätzliche XSLT-Parameter (Array) oder Xpath-Parameter (boolesch) handeln. Das schafft Flexibilität für den Transformationsprozess. Die Funktion gibt dann eine DOMDocument-Objekt aus, das die transformierten Daten enthält.
Um die transformierten Daten anzuzeigen, liefert die letzte Funktion das Ergebnis und gibt es für den Benutzer aus. Durch Ausführen der Funktion result_dump_mem() auf das transformierte DOMDocument $domTranObj-Objekt lassen sich der Output oder das Ergebnis der Transformation aufrufen. Hierzu gehört auch ein einfaches Beispiel, wie man eine XSLT-Transformation mit PHP und DOM XSLT durchführt.
Für das zweite Beispiel wird der optionale Parameter der Funktion result_dump_file() eingeführt, die den Output der XSLT-Transformation in eine Datei ausgibt.
Beispiel
<?php
// XML, XSLT and HTML Dokumente
$xmlDatei = "adressen.xml";
$xsltDatei = "adressen.xslt";
$htmlDatei = "adressen.html";
$xsltParam = array( "date" => date( "F j, Y g:i a" ) );
// Erezugt ein DomDocument-Objekt unter Verwendung eines
// XML-Dokuments
if(!$domXmlObj = domxml_open_file($xmlDatei )) {
die( "XML-Dokument kann nicht geparst werden!" );
}
// Erzeugt ein DOMDocument-Objekt unter Verwendung eines
// XSLT-Dokuments
$domXsltObj = domxml_xslt_stylesheet_file($xsltDatei);
// Erzeugt ein DOMDocument-Objekt welcher sich aus
// der Transformation eines XML- und XSLT-Dokument ergibt
$domTranObj = $domXsltObj->process($domXmlObj, $xsltParam);
// Erzeugt ein HTML-Dokument aus dem transformierten Objekt
$domXsltObj->result_dump_file($domTranObj, $htmlDatei);
// Gibt die Datei adressen.html aus
include($htmlDatei);
?>
|
Wie im vorangehenden Beispiel ist das erste Argument noch immer das DOMDocument-Objekt, das durch die DOMXSLTStylesheet-Prozessfunktion erstellt wurde. Außerdem wurde der Prozessfunktion ein Parameter hinzugefügt, der einen Parameterwert an den XSLT-Prozessor übergibt. Dies demonstriert die Fähigkeit, die XSLT-Transformation in PHP dynamisch zu steuern.
|
|
|
|
|
|
|