Fonctionnement des programmes XSL-XSLT
La récursivité
<xsl:template match="XPATH-1">
...
<xsl:apply-templates select="XPATH-2"/>
...
</xsl:template>
<xsl:template match="XPATH-2">
...
<xsl:apply-templates select="XPATH-3"/>
...
</xsl:template>
<xsl:template match="XPATH-3">
...
<xsl:value-of select="XPATH-4"/>
...
</xsl:template>
Règles par défaut
XSLT comporte trois règles par défaut qui sont appliquées quand aucune règle du programme n'est sélectionnée.
La première règle s'applique à la racine et à tous les éléments et déclenche un appel récursif sur tous les fils du nœud courant :
<xsl:template match="*|/"> <xsl:apply-templates/> </xsl:template>
La deuxième règle s'applique aux nœuds texte et aux attributs et insère le résultat textuel de ces nœuds dans le document résultat :
<xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template>
La troisième règle s'applique aux commentaires et aux instructions de traitement et les ignore :
<xsl:template match="processing-instruction() | comment()" />
Exemple : Le programme XSLT minimal
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"/>
Attention :
Il faut donc prendre garde aux règles par défaut, sources d'effets de bord.
Conseil :
Veiller à bien traiter tous les cas.
Méthode :
Court-circuiter les règles par défaut, en générant des messages d'erreurs sur la sortie.
Complément : Mode, priorité, règles nommées
priority
: permet de surcharger les règles de priorité par défautmode
: permet de définir plusieurs règles pour une même prémisse et de choisir explicitement celle que l'on veut au moment de l'appelname
: permet de définir des templates nommés, qui sont appelés explicitement (comme des fonctions) par l'instruction<call-template>
et non plus seulement par le moteur de récursivité.
Complément : Priorité entre les règles
Si un attribut
priority
est défini sur la règle, la règle est prioritaire, l'attribut le plus élevé est prioritaire sur le moins élevé.Sinon, c'est celle dont le XPath est le plus spécifique d'abord (expression d'un axe, d'un prédicat)
Exemple : http://www.zvon.org/xxl/XSLTutorial/Output_fre/example69_ch2.html