<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>
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()" />
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"/>
Il faut donc prendre garde aux règles par défaut, sources d'effets de bord.
Veiller à bien traiter tous les cas.
Court-circuiter les règles par défaut, en générant des messages d'erreurs sur la sortie.
priority
: permet de surcharger les règles de priorité par défaut
mode
: 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'appel
name
: 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é.
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