xsl:template permet de créer un motif de transformation; il peut être assimilé à la fonction ou la procédure dans un langage traditionnel.
Il y a deux types de template. Le premier est nommé et n'est exécuté que lorsqu'il est appelé explicitement :
<xsl:template name="motif1">
...
</xsl:template>
Pour utiliser ce template, il faut l'appeler avec l'instruction xsl:call-template :
<xsl:call-template name="motif1">
...
</xsl:call-template>
Etant donné que le template est équivalent à une fonction ou une procédure, de la même façon, il est possible de passer un paramètre au template.
<xsl:template name="motif1">
<xsl:param name="param1"/>
<xsl:param name="param2"/>
...
</xsl:template>
Les paramètres sont utilisables dans le template par $param1, $param2, ...
Le second n'est exécuté que lorsque la balise indiquée est trouvée dans l'arborescence du XML. A chaque fois que la balise est rencontrée, le template est exécuté :
<xsl:template match="balise">
...
</xsl:template>
et pour l'utiliser, il faut utiliser l'instruction apply-templates :
<xsl:apply-templates"/>
pour appliquer tous les templates disponibles. L'interpréteur va parcourir l'arbre XML en entier (à partir de l'endroit où est appellée l'instruction apply-templates) et à chaque noeud va vérifier que l'élement correspond à un template. Si c'est le cas (match) alors le template est exécuté, sinon rien ne va se passer, sauf indication contraire.
Dans le cas où l'on veut appeler un template spécifique, alors il faut le préciser :
<xsl:apply-templates" select="élément1"/>
auquel cas l'on appelle le template traitant spécifiquement l'élement élément1, à partir de l'endroit indiqué (l'endroit où l'instruction est appelée).