xsl:template

Syntax

<xsl:template>
     <xsl:param> *
     Template-Body
</xsl:template>


Postition

Top-Level Element


Attribute
Bezeichnung Wert Bedeutung
match Pattern Pattern, welcher die Knoten bestimmt, die mit dem Template zu bearbeiten sind
name QName Name des Templates; ist dieses Attribute nicht vorhanden, muss zumindest das [match] Attribut existieren
priority Number Zahl, welche die Priorität des Templates festlegt
mode QName definiert den Modus des Templates; wird das
<xsl :apply-templates> verwendet, werden nur die Templates mit dem bestimmten Modus angesprochen

<xsl:template>

definiert ein Template zur Generation des Outputs. Es wird entweder explizit über einen definierten Namen oder durch einen Vergleich mit einem Namen eines Knotens im Input-Dokument aufgerufen.

Es wird aufgrund folgender Prioritäten ausgewählt:
- als erstes werden alle Templates ausgewählt, die ein [match] Attribut besitzen
- aus dieser Liste werden dann nur solche ausgewählt, die den gleichen Modus besitzten, wie das
  <xsl:apply-templates>-Element (besitzt dieses Element keinen Modus, muss auch das Template keinen Modus   besitzen, um ausgewählt zu werden)
- als nächstes erfolgt die Auswahl aufgrund der Entsprechung ihrer Pattern mit den selektierten Knoten
- verbleiben nun mehrere Templates, die in Frage kommen, wird dasjenige mit der höchsten Importpriorität   ausgewählt
- bleiben jetzt immernoch mehrere Templates übrig, wird dasjenige mit der höchsten, definierten Priorität ausgewählt
- wenn es dann noch mehrere Templates gibt, entscheidet der Prozessor, ob er einen Fehler ausgibt oder, ob er das   Template auswählt, das als letztes im Stylesheet definiert wurde
- konnte kein entsprechendes Template gefunden werden, wird das Default-Template aufgerufen

Nach der Auswahl des Templates, werden folgende Prozessschritte durchgeführt:
- ist das Template mit dem <xsl:apply-templates> Element aufgerufen worden, wird der aktuelle Knoten oder das   aktuelle Knotenset intern gespeichert
- es wird ein neuer Zwischenspeicher generiert, der die lokalen Varibalen halten kann
- alle Parameter, die mit den <xsl:param> Elementen definiert worden sind, werden evaluiert; enthielt der
  Template-Aufruf ein <xsl:with-param>, wird dessen Name mit den hier definierten Parametern verglichen; falls er   übereinstimmt, wird ihm der Wert des <xsl:with-param> Elements zugewiesen, anderenfalls wird der Wert direkt   berechnet
- der Template-Body wird ausgeführt; Element- und Textknoten werden der aktuellen Position des Output-Dokuments   hinzugefügt

Nachdem der Prozess beendet wurde, wird der Zwischenspeicher des Templates gelöscht. Alle lokalen Parameter gehen verloren und der Prozessor springt an die Stelle des Template-Aufrufs zurück.


Definition

XSLT Kapitel 5.3


Beispiel

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
<xsl:output method="html"/>

<xsl:template match="/">
     <HTML>
          <HEAD>
               <TITLE>Element: &lt;xsl:template&gt; / Beispiel 01</TITLE>
          </HEAD>
          <BODY>
               <xsl:apply-templates select="shop"/>
          </BODY>
     </HTML>
</xsl:template>

<xsl:template match="shop">
     <TABLE BORDER="1">
          <xsl:call-template name="produce-header"/>
          <xsl:apply-templates select="order/product"/>
     </TABLE>
</xsl:template>

<xsl:template name="produce-header">
     <TR>
          <TH WIDTH="150">Abteilung:</TH>
          <TH WIDTH="100">Artikel:</TH>
          <TH WIDTH="100">Preis:</TH>
     </TR>
</xsl:template>

<xsl:template match="product">
     <TR>
          <TD><xsl:value-of select="@department"/></TD>
          <TD><xsl:value-of select="name"/></TD>
          <TD ALIGN="RIGHT">
               <xsl:value-of select="price"/>
               <xsl:text> </xsl:text>
               <xsl:apply-templates select="currency" mode="basic"/>
          </TD>
     </TR>
</xsl:template>

<xsl:template match="currency">
     <xsl:text>dieses Template wird nicht ausgeführt !</xsl:text>
     <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="currency" mode="basic">
     <xsl:value-of select="."/>
</xsl:template>

</xsl:stylesheet>


© 2001 by Timo Schäfer