Stylesheet-Einbindung
Für große XSLT-Skripte oder -Projekte kann es sinnvoll sein, Templates in weitere Dateien auszulagern. Dadurch werden die einzelnen Skripte nicht nur kleiner und übersichtlicher, sondern auch wiederverwendbar, d. h. Sie können ein XSLT-Skript von mehreren anderen XSLT-Skripten einbinden. In XSLT gibt es zwei Mechanismen für solche Vorhaben: den Import und die Inkludierung.
Import
Um eine Datei zu importieren, müssen Sie das XSLT-Element import
angeben. Dieses muss sich dabei direkt im
stylesheet
-Element befinden. Das leere Element import
verfügt über das Attribut href
,
mit welchem Sie den Pfad zur importierenden Datei angeben. In der importierten Datei müssen Sie nichts Weiteres angeben.
Sie notieren dort ebenfalls ganz normal Templates. Um von der „Hauptdatei“, die in der importierten Datei notierten Templates
anzuwenden, verwenden Sie auch ganz normal das apply-templates
-Element. Wenn Sie in der „Hauptdatei“ und in der
importierten Datei ein Template notiert haben, welches über die gleiche Bedingung verfügt, so haben Sie einen Template-Konflikt.
Dies ist jedoch nicht weiter schlimm. Das Template der Hauptdatei hat prinzipiell immer Vorrecht. Möchten Sie explizit das
Template von der importierten Datei aufrufen oder möchten Sie aus dem Template in der Hauptdatei noch zusätzlich das Template
der importierten Datei anwenden, so können Sie das XSLT-Element apply-imports
notieren. Das Element ist einteilig
und verfügt über keine Attribute.
XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml-stylesheet href="import.xsl" type="text/xsl" ?> <artikel> <titel>Grundlagen von XSLT</titel> <text>Hier lernen Sie die Grundlagen von XSLT ...</text> </artikel>
XSLT-Code (import.xsl):
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="import-erw.xsl" /> <xsl:template match="/"> <html> <head> <title>Stylesheet importieren - XSLT Code-Beispiel</title> <meta charset="utf-8" /> <meta name="robots" content="noindex,nofollow" /> <meta name="publisher" content="Homepage-Webhilfe" /> </head> <body> <xsl:apply-imports /> </body> </html> </xsl:template> </xsl:stylesheet>
XSLT-Code (import-erw.xsl):
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="artikel"> <article> <xsl:apply-templates /> </article> </xsl:template> <xsl:template match="titel"> <h1><xsl:value-of select="." /></h1> </xsl:template> <xsl:template match="text"> <p><xsl:value-of select="." /></p> </xsl:template> </xsl:stylesheet>
Übrigens: Das hier verwendete Verfahren kommt Ihnen vielleicht von der Objektorientierung bekannt vor, wo Methoden überschrieben werden können.
Inkludierung
Bei der Inkludierung werden die „Hauptdatei“ und die inkludierte Datei verschmolzen bzw. vereint. Um ein Stylesheet in
das Dokument zu inkludieren, verwenden Sie das einteilige Element include
. Dieses muss ebenfalls direkt im
Wurzelelement des XSLT-Dokuments notiert werden. Über das href
-Attribut wird der Pfad zur inkludierten Datei
festgelegt. Um die Templates aus der inkludierten Datei anzuwenden, verwenden Sie weiterhin wie bekannt das
apply-templates
-Element.
XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml-stylesheet href="include.xsl" type="text/xsl" ?> <artikel> <titel>Grundlagen von XSLT</titel> <text>Hier lernen Sie die Grundlagen von XSLT ...</text> </artikel>
XSLT-Code (include.xsl):
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:include href="include-erw.xsl" /> <xsl:template match="/"> <html> <head> <title>Stylesheet inkludieren - XSLT Code-Beispiel</title> <meta charset="utf-8" /> <meta name="robots" content="noindex,nofollow" /> <meta name="publisher" content="Homepage-Webhilfe" /> </head> <body> <xsl:apply-templates /> </body> </html> </xsl:template> </xsl:stylesheet>
XSLT-Code (include-erw.xsl):
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="artikel"> <article> <xsl:apply-templates /> </article> </xsl:template> <xsl:template match="titel"> <h1><xsl:value-of select="." /></h1> </xsl:template> <xsl:template match="text"> <p><xsl:value-of select="." /></p> </xsl:template> </xsl:stylesheet>
Wichtig: Wenn bei der Inkludierung ein Konflikt entsteht (also zwei Templates, welche die gleiche Bedingung haben), so kann keine Transformation erfolgen. Beim Import hingegen gibt es keinen Fehler (siehe Beschreibung oben).