<!--
Category: instruction -->
<xsl:apply-templates
select =
node-set-expression
mode =
qname>
<!-- Content: (xsl:sort | xsl:with-param)* -->
</xsl:apply-templates>
Mittels xsl:apply-templates
können Templates angewendet werden. Dabei wird im select
-Attribut ein XPath-Ausdruck angegeben, der - ausgehend vom Current Node - die zu bearbeitenden Knoten auswählt. Das Ergebnis ist ein Node Set, das vom XSLT-Prozessor zum weiteren Traversieren des Quelldokuments genutzt wird. Das Node Set wird dabei Element für Element abgearbeitet und jeweils eine entsprechende Template Rule gesucht. Dabei wird das aktuelle Element im Node Set zum Current Node des Prozesses.
Wenn keine Template Rule existiert, werden implizite Regeln angewendet.
Wird kein select
-Argument angegeben, beinhaltet das Node Set alle Knoten auf der child-Achse, was folgenden Ausdrücken entspricht: select='child::*' oder select='*'.
Der Parameter mode dient zur weiteren Auswahl der anzuwendenden Template Rule. Beim Aufruf kann die Template Rule mittels des xsl:with-param
-Konstrukts mit Parametern versorgt werden. Das Node Set, das durch das select
-Attribut gebildet wird, kann mittels xsl:sort
nach verschiedenen Kriterien sortiert werden.
Die eingebauten Template Rules entbinden den Anwender von der Definition des Verhaltens für Character Data oder Elemente, zu denen es kein Template gibt. Diese Regeln besagen, dass dann alle Kindelemente durchwandert werden und für jedes davon implizit wieder ein xsl:apply-templates
aufgerufen wird. Trifft der XSLT-Prozessor dann auf Character Data und ist auch hier kein explizites Template definiert, wird implizit xsl:value-of
aufgerufen und die Zeichendaten in das Ausgabedokument überführt.
Diese Built-in Template Rules sind für alle Elementtypen definiert:
<!--
Category: instruction -->
<xsl:call-template
name
= qname>
<!-- Content: xsl:with-param* -->
</xsl:call-template>
Mittels xsl:call-template
ist es möglich, gezielt bestimmte Template Rules auszuführen. Der Inhalt des Templates wird an der aktuellen Stelle im Zieldokument instanziiert, wobei sich der Current Node des XSLT-Prozessors nicht ändert.
Beispiel:
<xsl:call-template name="tabellenkopf">
<xsl:with-param name="align">right</xsl:with-param>
</xsl:call-template>
<xsl:with-param
name
= qname
select =
expression>
<!-- Content: template
-->
</xsl:with-param>
Im vorigen Abschnitt wurde schon auf die Vereinbarung von Parametern in Template Rules eingegangen. Mittels xsl:with-param
wird nun ein Paramter übergeben. Das Attribut name
bezeichnet den Parameter. Der Wert des Parameters ergibt sich durch den select
-Ausdruck oder durch instanziieren des Templates innerhalb des Konstrukts.
Wird der Wert über das select
-Attribut bestimmt, erhält man einen der vier Basistypen (String, Zahl, Boolean oder Node Set) oder, falls erweiterte Funktionen aufgerufen werden, weitere Typen als Ergebnis. Mit diesem Typ wird dann auch weiterhin gearbeitet.
Das Instanziieren des Templates liefert ein Ergebnis vom Typ Result Tree Fragment. Dieser Begriff wird später noch genauer erklärt.
Beispiel:
Folgende Template Rule:
<xsl:template match="image">
<xsl:param name="align" select="'left'" />
<img src="org" align="{$align}" />
</xsl:template>
Über
<xsl:apply-templates select="images/image[1]">
<xsl:with-param name="align" select="'right'"/>
</xsl:with-param>
kann dann der Parameter align
mit dem Wert right
vom Typ String an die obige Template Rule übergeben werden.
... [Seminar XML und Java] ... [Thema: XSLT] ... [Anwenden von Templates] ... [Aufbau eines Stylesheets] ...