Discussion sur le style de programmation en XSLT
illustrée par un exemple
On a le choix entre
- programmer par règles, en fignolant les filtres
- utiliser les structures de contrôle (conditionnelles &
boucles, voire procédures...)
ce qui ramène à un style plus traditionnel.
Ce choix n'est pas toujours évident !
c'est affaire de goût, mais aussi de facilité de lecture et de maintenance.
Pour bien saisir la différence, supposons que, dans l'exemple ci-après,
on veuille modifier le
traitement commun à toutes les étapes en ajoutant une ligne horizontale :
-
dans la rédation en style "par règles" il faudra l'écrire 4 fois...
- dans la rédaction en style traditionnel on ne l'écrira qu'une seule fois.
- par règles (fichier
Menu1.xsl
)
<!-- ============ Traitement au niveau "étape" ============== -->
<xsl:template match="liste/étape[@nom='apéritif']">
<h3 id='apéritif'><i>Apéritifs</i></h3>
<blockquote>
<xsl:apply-templates select="*"/>
</blockquote>
</xsl:template>
<xsl:template match="liste/étape[@nom='entrée']">
<h3 id='apéritif'><i>Les entrées</i></h3>
<blockquote>
<xsl:apply-templates select="*"/>
</blockquote>
</xsl:template>
<xsl:template match="liste/étape[@nom='plat']">
<h3 id='apéritif'><i>Les plats</i></h3>
<blockquote>
<xsl:apply-templates select="*"/>
</blockquote>
</xsl:template>
<xsl:template match="liste/étape[@nom='dessert']">
<h3 id='apéritif'><i>Les desserts</i></h3>
<blockquote>
<xsl:apply-templates select="*"/>
</blockquote>
</xsl:template>
<!-- ===== Traitement au niveau "intérieur à l'étape" ===== -->
<xsl:template match="choix">
<p><xsl:value-of select="."/></p>
</xsl:template>
<xsl:template match="annonce">
<!-- ne rien faire -->
</xsl:template>
- par la conditionnelle "choose" (fichier
Menu2.xsl
)
<!-- ============ Traitement au niveau "étape" ============== -->
<xsl:template match="liste/étape">
<xsl:choose>
<xsl:when
test="@nom='apéritif'">
<h3
id='apéritif'><i>Apéritifs</i></h3>
</xsl:when>
<xsl:when
test="@nom='entrée'">
<h3
id='entrée'><i>Les entrées</i></h3>
</xsl:when>
<xsl:when
test="@nom='plat'">
<h3
id='plat'><i>Les plats</i></h3>
</xsl:when>
<xsl:when
test="@nom='dessert'">
<h3
id='dessert'><i>Les desserts</i></h3>
</xsl:when>
</xsl:choose>
<blockquote>
<xsl:apply-templates
select="./*"/>
</blockquote>
</xsl:template>
<!-- ===== Traitement au niveau "intérieur à l'étape" ===== -->
<xsl:template match="choix">
<p><xsl:value-of select="."/></p>
</xsl:template>
<xsl:template match="annonce">
<!-- ne rien faire -->
</xsl:template>