1. <xsl:choose> Branchements multiples conditionnels
Structure syntaxique (similaire à if … else if … else)
<xsl:choose>
<xsl:when test="expression‑condition">
Contenu affiché si la condition est vraie
</xsl:when>
<xsl:when test="expression‑condition2">
Contenu affiché si la condition2 est vraie
</xsl:when>
<xsl:otherwise>
Contenu affiché quand aucune condition when n’est satisfaite (optionnel)
</xsl:otherwise>
</xsl:choose>Langage du code : HTML, XML (xml)
- L’évaluation se fait du haut vers le bas ; le premier
<xsl:when>rempli arrête tout traitement ; <xsl:otherwise>doit être placé après l’ensemble des balises<xsl:when>;- Dans les expressions, remplacez
>par>et<par<.
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head></head>
<body>
<ul>
<!-- Parcourir tous les étudiants -->
<xsl:for-each select="class/student">
<!-- Tri croissant par âge -->
<xsl:sort select="age"/>
<!-- Filtrer les étudiants dont la taille dépasse 160 -->
<xsl:if test="height > 160">
<li>
<xsl:value-of select="name"/>;
<!-- Condition multiple : mettre l’âge en gras si taille>200 -->
<xsl:choose>
<xsl:when test="height > 200">
<b><xsl:value-of select="age"/></b>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="age"/>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>Langage du code : HTML, XML (xml)
Logique d’exécution : parcours → tri par âge → filtre taille>160 → affichage en gras de l’âge pour taille supérieure à 200.
2. Transformation XSLT côté navigateur
Tous les navigateurs ne prennent pas en charge XSLT. Vous pouvez utiliser les solutions ci‑dessous. Aujourd’hui Chrome et Firefox sont majoritaires, donc ce problème est rare, mais il est utile de le connaître.
1 : Transformation client JavaScript (ancienne solution IE)
Principe : charger du code JS au chargement de la page, lire le fichier XML et la feuille de style XSL, réaliser la transformation dans le navigateur et produire du HTML.
// Charger XML
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load("cdcatalog.xml");
// Charger XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load("cdcatalog.xsl");
// Transformer et afficher
document.write(xml.transformNode(xsl));Langage du code : JavaScript (javascript)
ActiveXObjectn’est disponible que sur les anciennes versions d’IE, incompatible avec Chrome et Firefox modernes ;- Dépend de l’analyseur XML natif du navigateur, la compatibilité est faible.
2 : Transformation côté serveur
Idée principale : ne pas effectuer la transformation dans le navigateur
C’est la méthode majoritairement utilisée aujourd’hui. La transformation s’effectue sur le serveur, ce qui supprime les problèmes de compatibilité navigateur, y compris dans beaucoup d’entreprises.
- Utiliser un moteur XSLT au niveau backend (Java / PHP / .NET…) pour convertir préalablement XML + XSL en XHTML ;
- Envoyer directement la page HTML générée au navigateur ;
- Avantage : fonctionne avec tous les navigateurs, le client n’a pas besoin de gérer XSLT.
3. Concepts de base XPath
XPath est un langage d’interrogation par chemin pour documents XML, c’est le socle fondamental de XSLT.
- Situer les nœuds XML à l’aide d’expressions de chemin (semblable aux chemins de fichiers) ;
- Bibliothèque de fonctions standard intégrée pour calculs numériques et traitements de chaînes ;
- Norme officielle W3C ;
- Toutes les expressions dans
select=""ettest=""suivent la syntaxe XPath.
Résumé
| Balise | Cas d’usage | Caractéristique de branchement |
|---|---|---|
<xsl:if> | Condition simple | Seulement la branche vraie, pas de else |
<xsl:choose> | Branchements multiples | Plusieurs when + otherwise (équivaut à else) |
Branchements multiples