xsl:template

Création d'un motif de transformation

Définition

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 est défini de la façon suivante :

<xsl:template
name= Qname
match= Pattern
priority= number
mode= QName>
[…]
</xsl:template>

Usages

match

match permet de rechercher un motif. Il s'emploie de la façon suivante :

<xsl:template match="motif">

</xsl:template>

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 si l'élement correspond à un template. Si c'est le cas (match) alors le template est exécuté, il passera au noeud suivant, sauf indication contraire.

Les motifs sont de la forme :

match="title"

Trouve tous les éléments title.

match="section/title"

Trouve tous les éléments title ayant l'élément section pour enfant.

match="section//title"

Trouve tous les éléments title ayant section pour descendant.

match="section/title[@short-name]"

Trouve tous les éléments title ayant pour enfant section avec un attribut short-name.

match="appendix//section[@type='reference']/title"

Trouve tous les éléments title, enfants de l'élémentsection. Cet élément a un attribut type ayant pour valeur "reference", et a pour ancêtre appendix.

match="appendix[.//section[@type='reference']/title]"

Trouve tous les éléments appendix ayant des descendants section, ceux-ci ayant un attribut type de valeur "reference" et un fils title.

Pour utiliser ce template, il faut l'appeler avec l'instruction xsl:apply-templates :

<xsl:apply-templates select="motif"/>

name

Le template nommé définit une fonction ou procédure nom fondé sur la recherche de motif. Il peut être utilisé avec des paramètres, de la façon suivante :

<xsl:template name="nom">
<xsl:param name="param1"/>
<xsl:param name="param2"/>

</xsl: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.

Les paramètres sont utilisables à l'intérieur du template par appel des variables de même nom $param1, $param2, …

Pour l'appeler, il faut utiliser l'instruction call-template :

<xsl:call-template name="nom"/>

Ou encore, s'il y a des paramètres :

<xsl:call-template name="nom">
<xsl:with-param name="param1" select="…"/>
<xsl:with-param name="param2" select="…"/>

</xsl:call-template>

mode

Le mode s'emploie en conjugaison de name ou match. Il permet de définir plusieurs fois la procédure de même nom ou de même motif, mais avec un traitement différent en fonction du mode.

priority

La priorité permet d'imposer une priorité de traitement dans le cas où plusieurs templates seraient applicables en même temps.