Les tests #
Utilisation des tests #
Dans cette section, nous apprenons à utiliser les tests conditionnels en XSLT avec les éléments xsl:if et xsl:choose, permettant de contrôler le flux de transformation basé sur des conditions XPath.
Nous pouvons tester des conditions à l’aide d’expressions XPath contenant les symboles « < », « = », « != », « or », « and », « > », « >= », « <= ». Nous utilisons les tests en XSLT avec les éléments « xsl:choose » et « xsl:if ». Par exemple, faire quelque chose de particulier, si le nom de l’élément courant est « montant ».
<xsl:template match="*">
<xsl:if test="name(.) = 'montant'">
Il s'agit d'un élément nommé «montant».
</xsl:if>
</xsl:template>
La syntaxe de l’élément « xsl:if » est très simple; si la valeur de l’expression XPath contenue dans l’attribut « test » est vraie, le contenu de l’élément « xsl:if » s’applique, sinon, on l’omet. Notez qu’il n’y a pas d’élément « xsl:else »
Nous pouvons aussi traiter plusieurs tests dans un seul élément « xsl:choose » comme ceci :
<xsl:template match="*">
<xsl:choose>
<xsl:when test="name(.)='montant'">
Il y a une balise "montant"
</xsl:when>
<xsl:when test="name(.)='facture'">
J'ai trouvé une "facture"
</xsl:when>
<xsl:otherwise>
Je ne connais pas cet élément
</xsl:otherwise>
</xsl:choose>
</xsl:template>
On peut aussi combiner plusieurs tests avec les opérateurs logiques and, or et not comme le montre le prochain exemple.
<xsl:template match="*">
<xsl:choose>
<xsl:when test="name(.)='montant' or name(.)='facture'">
Il y a une balise "montant" ou une
balise "facture"
</xsl:when>
<xsl:when test="not(name(.)='argent')">
Ce n'est ni montant, ni facture, ni argent.
</xsl:when>
<xsl:otherwise>
Je ne connais pas cet élément.
</xsl:otherwise>
</xsl:choose>
</xsl:template>
On peut aussi tester la langue d’un élément avec la fonction XPath « lang ». L’expression « count(//p[lang(’en’)]) » compte le nombre d’élément « p » ayant été déclaré comme contenant du texte en langue anglaise.
Observez qu’un élément « xsl:choose » contient plusieurs éléments « xsl:when » qui sont testés tour à tour, jusqu’à ce qu’une condition soit vraie; l’élément « xsl:otherwise » est présent pour l’éventualité où tous les tests échouent. Tous les tests sont réalisés en séquence et dès qu’une condition est vraie, les tests s’arrêtent et le contenu de l’élément « xsl:when » est évalué.
En XSLT, il ne faut pas abuser des tests; il est préférable d’utiliser des éléments « xsl:template » qui sont plus modulaires.