Académique Documents
Professionnel Documents
Culture Documents
I. Introduction
II. Fonctions XSLT
II.A. Liste des fonctions XSLT
II.B. Boucles avec xsl:for-each
II.C. Fonction xsl:if
II.D. Fonction xsl:choose
II.E. Une fonction sans paramètre (xsl:template et xsl:call-template)
II.F. Une fonction avec paramètres (xsl:param et xsl:with-param)
III. Bouts de codes utiles
III.A. Une vraie boucle
IV. Fonctions XPATH
V. Chaîne de caractères (XPATH)
V.A. Liste des fonctions
V.B. Exemple (1)
V.C. Exemple (2)
VI. Conditions (XPATH)
VI. Mathématiques
I. Introduction
XSLT offre de nombreuses fonctions dignes d'un langage de haut-niveau : variables, paramètres,
tests, boucles, fonctions, inclusion d'une feuille de style XSLT dans une autre, chargement de
plusieurs documents XML dans une même feuille de style XSLT, recherche de balises XML selon de
nombreux critères, etc.
Si vous n'avez pas lu mon introduction à XSLT, allez vite la lire sous peine de ne pas
comprendre certains passages.
II. Fonctions XSLT
xsl:for-each "Boucle"
xsl:if Si conditionnel
xsl:number Numérotation/compteur
Je vous ai menti (oh le vilain !). En fait, xsl:for-each n'est pas vraiment une boucle comme un
"for" en langage C. Cette fonction va prendre tous les noeuds d'une requête XPATH, et va leur
appliquer un traitement. Voyons déjà le fichier source :
<liste>
<invite>Moi</invite>
<invite>Amélie</invite>
<invite>Marie</invite>
<invite>Jéméry</invite>
</liste>
Puis le code XSLT qui va générer une liste HTML :
<ul>
<xsl:for-each>
<li>
<xsl:apply-templates select="." />
</li>
</for-each>
</ul>
II.C. Fonction xsl:if
L'instruction xsl:if permet d'exécuter ou non certaines parties du code. Exemple d'utilisation de
l'instruction if :
La fonction xsl:choose permet d'exécuter différents codes selon différentes conditions. Exemple
d'utilisation de l'instruction choose :
<xsl:choose>
<xsl:when test="nom = 'Victor'">
<xsl:text>Salut Victor, ça boume ?</xsl:text>
</xsl:when>
<xsl:when test="nom = 'Pierre'">
<xsl:text>Fait ciseau ... désolé, c'était nul.</xsl:text>
</xsl:when>
<xsl:when test="nom = 'Pierre'">
<xsl:text>Message impersonnel et froid : Bonjour.</xsl:text>
</xsl:when>
</xsl:choose>
On utilise souvent xsl:choose comme alternative au xsl:if pour disposer de xsl:other (qui remplace
xsl:else qui n'existe pas).
<xsl:template name="hello_world">
<xsl:text>Hello World !</xsl:text>
</xsl:template>
On va maintenant appeler notre fonction avec xsl:call-template :
Bon, passons aux choses sérieuses : passons des paramètres à notre fonction. On va par exemple
afficher deux nombres ... et leur somme, yahoo ! Pour déclarer des paramètres, on utilise
xsl:param. Voici le code de la fonction :
<xsl:template name="affiche_somme">
<xsl:param name="a" select="0" />
<xsl:param name="b" select="0" />
<xsl:text>a = </xsl:text>
<xsl:value-of select="$a" />
<xsl:text>, b = </xsl:text>
<xsl:value-of select="$b" />
<xsl:text>, et a+b = </xsl:text>
<xsl:value-of select="$a + $b" />
<xsl:text>.</xsl:text>
</xsl:template>
Lorsqu'on écrit <xsl:param name="a" select="0" /> : 0 est la valeur par défaut du paramètre a.
Appelons ce miracle de la programmation, toujours via xsl:call-template :
<xsl:call-template name="affiche_somme">
<xsl:with-param name="a" select="173" />
<xsl:with-param name="b">9001</xsl:with-param>
</xsl:call-template>
Vous savez quoi, le pire c'est que ça marche ! On obtient une sortie du style :
Je préfère vous le dire tout de suite : XSLT n'est pas fait pour faire des boucles ! C'est un langage
qui utilise des algorithmes récursifs, et non pas itératifs. C'est d'ailleurs beaucoup plus propre, mais
moins naturel.
Mais des fois, on a quand même besoin de boucles. Et oui, elles nous quitteront jamais, nous les
programmeur :-) Je vous offre donc ce p'tit bout de code qui pourrait peut-être vous sauver la vie
(qui sait ?) :
<xsl:template name="boucle">
<xsl:param name="debut" select="0" />
<xsl:param name="fin" select="0" />
<xsl:text>i = </xsl:text>
<xsl:value-of select="$debut" />
<br/>
translate(txt,avant,apres) transforme les caractères avant par ceux après dans la chaîne txt
On va dire que le noeud courant (.) contient mon email : victor.stinner+haypocalc.com (lisez '@' et
non '+'). Exemple d'utilisation des fonctions concat, substring-after et substring-before :
<xsl:value-of select="concat(
substring-before(.,'@'),
' SUR ',
substring-after(.,'@'))" />
Ben oui, on peut écrire sur plusieurs lignes si on veut, hé hé hé ! Sortie : "victor.stinner SUR
haypocalc.com", cool, c'est ce que je cherchais à faire (cacher mon email) ;-)
Disons que le noeud courant (.) contient le nom d'une image : "bibi_phoque.gif". On va remplacer
l'extension '.gif' par '.png'. Exemple d'utilisation des fonctions substring et length :
true() vrai
false() faux
a == b a égal b ?
a != b a différent de b ?
VI. Mathématiques
a+b Somme de a et b
a-b Différence de a et de b
a*b Produit de a et de b
-x Opposé de x