Programmation avec XSLTDate de publication : 16/09/2003 , Date de mise a jour : 06/07/2005
Par
Victor Stinner (home)
Tutoriel pour XSLT (eXtensible Stylesheet Language Transformation). 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.
II. Fonctions XSLTII.A. Liste des fonctions XSLT
II.B. Boucles avec xsl:for-each
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 :
Puis le code XSLT qui va générer une liste HTML :
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 :
Ok, mais où est le xsl:else ? Euh ... Désolé, y'a pas :-( Il faut utiliser xsl:choose :-/
II.D. Fonction xsl:choose
La fonction xsl:choose permet d'exécuter différents codes selon différentes conditions. Exemple d'utilisation de l'instruction choose :
On utilise souvent xsl:choose comme alternative au xsl:if pour disposer de xsl:other (qui remplace xsl:else qui n'existe pas).
II.E. Une fonction sans paramètre (xsl:template et xsl:call-template)
Pour déclarer une fonction, on utilise la fonction xsl:template. Exemple :
On va maintenant appeler notre fonction avec xsl:call-template :
C'est tout ... ben ouais. En fait, c'est tout bête !
II.F. Une fonction avec paramètres (xsl:param et xsl:with-param)
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 :
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 :
Vous savez quoi, le pire c'est que ça marche ! On obtient une sortie du style :
III. Bouts de codes utilesIII.A. Une vraie boucle
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 ?) :
Prototype de la fonction : boucle($debut, $fin). Elle va afficher les nombres de $debut à $fin. Que dire de plus ? Ah oui, ce "<" bizarre. Et bien c'est qu'on reste en XML, et "alt;" ne peut pas s'écrire tel quel. Il faut l'écrire dans sa forme encodée "<". Voilà tout !
IV. Fonctions XPATH
V. Chaîne de caractères (XPATH)V.A. Liste des fonctions
V.B. Exemple (1)
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 :
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) ;-)
V.C. Exemple (2)
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 :
Bon, la fonction xsl:string-before "pourrait être" plus adaptée que substring. Sauf ... si le nom de l'image comporte un point ! "bibi.phoque.gif".
VI. Conditions (XPATH)
VI. Mathématiques
|
Copyright © 2005 Victor STINNER. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.