|
XSLT |
|
|
XSL:
Extensible Stylesheet Language Transformations (XSLT) wird unter http://www.w3.org/TR/xslt wie folgt beschrieben:"... XSLT, which is a language for transforming XML documents into other XML documents". Mit Hilfe von XSLT können XML Dokumente in andere Datenformate transformiert werden. Folgende Abbildung zeigt den Ablauf einer XSLT Transformation:
Folgendes Beispiel zeigt die Transformation in eine HTML Datei. Das XML Dokument (xslt/buchliste_little.xml): <?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet type="text/xsl" href="xsl_html.xsl"?> <buchliste> <buch> <titel>Uli Stein´s Tierleben</titel> <autor> <vorname>Uli</vorname> <nachname>Stein</nachname> </autor> <ausgabe>Taschenbuch</ausgabe> <seiten>45</seiten> <preis>9,2 Euro</preis> </buch> <buch> <titel>Alles Liebe!</titel> <autor> <vorname>Uli</vorname> <nachname>Stein</nachname> </autor> <ausgabe>Taschenbuch</ausgabe> <seiten>23</seiten> <preis>11,3 Euro</preis> </buch> <buch> <titel>Die Alpen</titel> <autor> <vorname>Heinz</vorname> <nachname>Berg</nachname> </autor> <ausgabe>Taschenbuch</ausgabe> <seiten>323</seiten> <preis>41,3 Euro</preis> </buch> </buchliste> Die transformierende XSL Datei (xslt/xsl_html.xsl) <?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<head><title>Buchliste mit XSL in HTML Transformiert</title>
</head>
<body>
<h3>Buchbeschreibung</h3>
<xsl:for-each select="buchliste/buch">
<span style="font-weight:bold">Autor: </span>
<xsl:value-of select="autor"/><br/>
<span style="font-weight:bold">Titel: </span>
<xsl:value-of select="titel"/><br/>
<span style="font-weight:bold">Preis: </span>
<xsl:value-of select="preis"/><br/>
<span style="font-weight:bold">Ausgabe: </span>
<xsl:value-of select="ausgabe"/><br/>
<span style="font-weight:bold">Seitenzahl: </span>
<xsl:value-of select="seiten"/><br/><br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Ohne for-each wird nur das erste Element angezeigt. Zusätzlich müsste es ohne for-each lauten <xsl:value-of select="buchliste/buch/autor"/>. Der Netscape zeigt obigen Quelltext als Ergebnis alle Bücher in einer Zeile. <span> bewirkt keinen Zeilenumbruch, <div> schon. Das Endergebnis als HTML Datei (xslt/html_output.htm): <html> <head> <title>Buchliste mit XSL in HTML Transformiert</title> </head> <body> <h3>Buchbeschreibung</h3> <span style="font-weight:bold">Autor: </span>Uli Stein<br /> <span style="font-weight:bold">Titel: </span>Uli Stein´s Tierleben<br /> <span style="font-weight:bold">Preis: </span>9,2 Euro<br /> <span style="font-weight:bold">Ausgabe: </span>Taschenbuch<br /> <span style="font-weight:bold">Seitenzahl: </span>45<br /><br /> <span style="font-weight:bold">Autor: </span>Uli Stein<br /> <span style="font-weight:bold">Titel: </span>Alles Liebe!<br /> <span style="font-weight:bold">Preis: </span>11,3 Euro<br /> <span style="font-weight:bold">Ausgabe: </span>Taschenbuch<br /> <span style="font-weight:bold">Seitenzahl: </span>23<br /><br /> <span style="font-weight:bold">Autor: </span>Heinz Berg<br /> <span style="font-weight:bold">Titel: </span>Die Alpen<br /> <span style="font-weight:bold">Preis: </span>41,3 Euro<br /> <span style="font-weight:bold">Ausgabe: </span>Taschenbuch<br /> <span style="font-weight:bold">Seitenzahl: </span>323<br /><br /> </body> </html> Packt man das ganze mit Hilfe von XSL in eine Tabelle sieht die XSL Datei (xslt/xsl_html_tabelle.xsl) wie folgt aus: <?xml version="1.0" encoding="iso-8859-1"?> <!-- ein nbsp wird als entität nicht erkannt --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html> <head> <title>Buchliste mit XSL in HTML Transformiert</title> </head> <body> <h3>Buchbeschreibung</h3> <table border="0" cellpadding="2"> <xsl:for-each select="buchliste/buch"> <tr> <td>Autor:</td> <td> <xsl:value-of select="autor"/> </td> </tr> <tr> <td>Titel:</td> <td> <xsl:value-of select="titel"/> </td> </tr> <tr> <td>Preis:</td> <td> <xsl:value-of select="preis"/> </td> </tr> <tr> <td>Ausgabe:</td> <td> <xsl:value-of select="ausgabe"/> </td> </tr> <tr> <td>Seitenzahl:</td> <td> <xsl:value-of select="seiten"/> </td> </tr> <tr> <td><br/></td> <td><br/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> Das Endergebnis mit Tabelle zeigt die xslt/buchliste_little_tabelle.xml. Über height in einer td kann die Zeilenhöhe genau definiert werden. Serverseitige XML-UnterstützungWill man serverseitig mit Hilfe von XSLT eine XML-Datei z. B. in HTML transformieren, stehen die verschiedensten serverseitigen Programmiersprachen zur Verfügung. Das Endergebnis der Transformation
wird in Form einer HTML-Datei zum Client geschickt. Folgende Quelltexte (xsl/xslt/xsl_html.asp, ) zeigen die Umsetzung in ASP (Active Server Pages mit Visual Basic Script)
und PHP. Ob die XML-Unterstützung durch PHP geleistet wird, kann mit der
ASP-Variante:Quelltext der asp-Datei (xsl_html.asp) zur Transformation einer XML-Datei mit Hilfe einer XSLT-Datei: <%
'Instanz eines XML-Parsers erstellen und Laden der XML-Datei in den Arbeitsspeicher
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("buchliste_little.xml"))
'Weitere Instanz eines XML-Parsers erstellen und Laden der XSL-Datei in den Arbeitsspeicher
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("xsl_html.xsl"))
'Transformation der XML-Datei mit Hilfe der XSL-Datei, Rückgabe des Ergebnisses an den Browser
Response.Write(xml.transformNode(xsl))
%>
PHP-Variante:Für die XML-Unterstützung muss PHP nicht eigens konfiguriert werden. Folgende Anweisung zeigen ein Installations- und Anwendungs-Beispiel unter Linux und Windows: Linux (Installation Apache 2 und PHP 5, im YAST2 können die verschiedenen Module ebenfalls konfiguriert werden):
http://www.php.net/manuel/de/install.apache2.php: Beispiel 3-5. Installation Instructions (Apache 2 Shared Module Version)
Windows (Installation PHP 5): Die Installation von PHP5 für IIS unter Windows XP Professional geht leicht von der Hand. Bitte unter http://www.php.net/downloads.php PHP 5.0.0 installer per Download holen und installieren. Eine andere Variante um u.a. Apache, MySQL und PHP (4 und 5) unter Windows und Linux im Paket zu installieren findet sich unter http://www.apachefriends.org/de/xampp.html . Zusätzlich kann Java Tomcat und Cocoon installiert werden. PHP 4 und XML Bei folgender Fehlermeldung (beim Aufruf einer php-Datei, die eine XML-Datei mit Hilfe einer XSLT-Datei transformieren soll) ist die Pfadangabe zur XML- oder XSL-Datei falsch. Unter Windows und unter Linux reicht der Dateiname, solange die XML- und XSLT-Dateien im rootweb des Webservers liegen! Die php-Datei kann in einem Subweb liegen. Warning: Sablotron error on line 1: XML parser error 4: not well-formed (invalid token) in c:\inetpub\wwwroot\php\list.php on line 8 Lösung (funktioniert unter Windows und Linux, alle Dateien liegen im rootweb des Webservers), Quelltext der php-Datei (xsl_html.php) zur Transformation einer XML-Datei mit Hilfe einer XSLT-Datei: <?php
// Dateinamen der XML- und XSL-Datei angeben
$xml_datei = "buchliste_little.xml";
$xslt_datei = "xsl_html.xsl";
// XSLT-Prozessor erstellen
$xslt_prozessor = xslt_create() or die("Der XSLT-Prozessor konnte nicht erstellt werden!");
// Transformation der XML-Datei mit Hilfe der XSLT-Datei, Ergebnis liegt in ergebnis
if($ergebnis = xslt_process($xslt_prozessor, $xml_datei, $xslt_datei))
{
// Ergebnis im Browser ausgeben
echo $ergebnis;
}
else
{
// falls ein Fehler auftritt, Error-Meldung ausgeben
echo "Folgender Fehler trat auf: " . xslt_error($xslt_prozessor) . "(Fehlernummer " . xslt_errno($xslt_prozessor) . ")";
}
// Freigabe der Ressourcen, die durch den XSLT-Prozessor-Handler belegt wurden
xslt_free($xslt_prozessor);
?>
PHP 5 DOM und XML <?php
$dom = new domDocument();
$dom->load("xsl_html.xsl");
$xslt_proc = new xsltprocessor;
$xsl = $xslt_proc->importStylesheet($dom);
$document = new DomDocument();
$document->load("buchliste_little.xml");
print $xslt_proc->transformToXml($document);
?>
Beispiele:
|