<xsl:template> |
Diese Anweisung definiert eine Ausgabevorlage (Template). Bei Vorlagen, die mit <xsl:template match="x" beginnen, definiert die Vorlage die Transformation eines bestimmten Elements. Bei Vorlagen, die mit <xsl:template name="x" beginnen, wird ein Satz an Ausgabeelementen definiert, die immer dann verarbeitet werden, wenn die Vorlage aufgerufen wird. Für jedes <xsl:template>-Element muss entweder das Attribut match oder das Attribut name definiert sein. Zwar wird das nicht häufig gemacht, es ist aber durchaus möglich, <xsl:template>-Elemente zu erstellen, die sowohl ein match- als auch ein name-Attribut besitzen.
Kategorie
Element der obersten Ebene
Obligatorische Attribute
Keine
Optionale Attribute
match Ein Muster, das die Elemente definiert, für die diese Vorlage aufgerufen werden soll. < xsl:template match= " xyz " > beispielsweise definiert eine Vorlage für das Verarbeiten von < xyz > -Elementen. name Ein Attribut, das den Namen für diese Vorlage angibt. Benannte Vorlagen werden mit dem Element < xsl:call-template > aufgerufen. mode Ein Attribut, das den Modus dieser Vorlage definiert. Ein Modus ist eine praktische Syntax, die das Erstellen spezifischer Vorlagen für spezifische Zwecke erlaubt. Sie könnten etwa eine < xsl:template > -Vorlage mit mode= " toc " erstellen, um einen Knoten für das Inhaltsverzeichnis eines Dokuments zu verarbeiten sowie weitere < xsl:template > -Vorlagen mit mode= " print " , mode= " online " , mode= " index " usw., um dieselbe Information für verschiedene Zwecke zu verarbeiten. priority Ein Attribut, das der Vorlage eine numerische Priorität zuweist. Als Wert ist jeder numerische Wert außer Infinity zulässig. Kann der XSLT-Prozessor nicht feststellen, welche Vorlage er zu verwenden hat (anders ausgedrückt: wenn mehrere Vorlagen dieselbe Standardpriorität haben), gestattet Ihnen das Attribut priority , die entscheidende Eigenschaft zu definieren.
Inhalt
Eine XSLT-Vorlage.
Übergeordnetes Element
<xsl:stylesheet>. <xsl:template> ist ein Element der obersten Ebene und kann nur dem Element <xsl:stylesheet> untergeordnet werden.
Definition
XSLT-Abschnitt 5.3, Definition von Template-Regeln
Beispiel
Im Beispiel wird eine Vorlage verwendet, die alle Knoten vom Eingabedokument in das Ausgabedokument kopiert, mit einem wichtigen Unterschied: alle Attribute im Originaldokument werden in Elemente im Ausgabedokument kopiert. Die erzeugten Elemente tragen die Namen der ursprünglichen Attribute und der Textinhalt der einzelnen Elemente entspricht dem Wert des entsprechenden Attributs. Hier das Stylesheet:
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:output method="xml"/>
      <xsl:template match="*">
        <xsl:element name="{name()}">
          <xsl:for-each select="@*">
            <xsl:element name="{name()}">
              <xsl:value-of select="."/>
            </xsl:element>
          </xsl:for-each>
          <xsl:apply-templates select="*|text()"/>
        </xsl:element>
      </xsl:template>
    </xsl:stylesheet>
Das Stylesheet enthält nur eine <xsl:template>-Vorlage, die jeden Knoten im Originaldokument transformiert. Zur Umwandlung des nachfolgenden XML-Dokuments wird das Beispiel-Stylesheet verwendet:
    <?xml version="1.0"?>
    <report>
      <title>Miles Flown in 2001</title>
      <month sequence="01">
        <miles-flown>12379</miles-flown>
        <miles-earned>35215</miles-earned>
      </month>
      <month sequence="02">
        <miles-flown>32857</miles-flown>
        <miles-earned>92731</miles-earned>
      </month>
      <month sequence="03">
        <miles-flown>19920</miles-flown>
        <miles-earned>76725</miles-earned>
      </month>
      <month sequence="04">
        <miles-flown>18903</miles-flown>
        <miles-earned>31781</miles-earned>
      </month>
    </report>
Hier die Ergebnisse der Transformation:
    <?xml version="1.0" encoding="UTF-8"?>
    <report>
      <title>Miles Flown in 2001</title>
      <month><sequence>01</sequence>
        <miles-flown>12379</miles-flown>
        <miles-earned>35215</miles-earned>
      </month>
      <month><sequence>02</sequence>
        <miles-flown>32857</miles-flown>
        <miles-earned>92731</miles-earned>
      </month>
      <month><sequence>03</sequence>
        <miles-flown>19920</miles-flown>
        <miles-earned>76725</miles-earned>
      </month>
      <month><sequence>04</sequence>
        <miles-flown>18903</miles-flown>
        <miles-earned>31781</miles-earned>
      </month>
    </report>