surdéfinit
un patron par défaut, applicable à tel type d'élément.
Ce patron est instancié par le processeur XSLT à chaque
fois qu'un élément correspondant est rencontré. La
version avec l'attribut
correspond aux
fonctions des langages fonctionnels. Ils sont destinés à
êtres "appelés" par l'instruction
XSL |
|
Sortie |
<xsl:template
match=" /" >
;-)
<xsl:call-template name=" dis_bonjour"/>
</xsl:template>
<xsl:template name="dis_bonjour">
Bonjour !
</xsl:template>
|
|
;-)
Bonjour !
|
Quelque soit le document XML en entrée, le
processeur commence à chercher un patron pouvant s'appliquer
à la racine, trouve ici le premier patron dans la feuille
de style et l'applique. Ce patron spécifie la génération
de texte et l'instanciation du patron dont le nom est dis_bonjour.
Il est possible, comme pour une fonction, de passer à un
tel patron des paramètres et de réaliser des appels
récursifs :
|
<xsl:template
match="/"
>
énumération :
<xsl:call-template name="enumer">
<xsl:with-param
name="start">0</xsl:with-param>
<xsl:with-param
name="end">9</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="enumer">
<xsl:param name="start"/>
<xsl:param name="end"/>
<xsl:value-of select="$start"/>
<xsl:if test="$start
< $end">
<xsl:call-template
name="enumer">
<xsl:with-param
name="start"><xsl:value-of
select="$start + 1"/></xsl:with-param>
<xsl:with-param
name="end"><xsl:value-of
select="$end"/></xsl:with-param>
</xsl:call-template>
</xsl:if> </xsl:template>
|
|
énumération :
0123456789
|
Il faut enfin noter que le patron est instancié
avec le même contexte que l'appelant, c'est à dire
que l'élément courant reste le même :
XML |
<livre>
<chapitre titre="Intro">
bla bla intro </chapitre>
<chapitre titre="Partie 1">
bla bla Partie 1 </chapitre>
<chapitre titre="Postface">
bla bla Postface </chapitre>
</livre> |
XSL |
|
Sortie |
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template name="suite">
Suite : <xsl:value-of
select="following-sibling::*[position()=1]/@titre"/>
</xsl:template>
<xsl:template match="chapitre">
Titre : <xsl:value-of
select="@titre"/>
<xsl:value-of select="."/>
<xsl:call-template name="suite"/>
</xsl:template>
</xsl:stylesheet>
|
|
Titre : Intro
bla bla intro
Suite : Partie 1
Titre : Partie1
bla bla Partie 1
Suite : Postface
Titre : Postface
bla bla Postface
Suite :
|
Cette feuille de style génère
pour chaque chapitre son titre, son contenu textuel et le titre
du chapitre à venir. Pour ce faire, un appel au patron de
nom suite est réalisé
dans le patron dédiés aux éléments chapitre.
L'expression XPath following-sibling...,
dans le patron suite, est relative
à "l'élément courant" du patron appelant,
à savoir chapitre. |