Branchements multiples

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)
  1. L’évaluation se fait du haut vers le bas ; le premier <xsl:when> rempli arrête tout traitement ;
  2. <xsl:otherwise> doit être placé après l’ensemble des balises <xsl:when> ;
  3. Dans les expressions, remplacez > par &gt; et < par &lt;.
<?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 &gt; 160">
            <li>
                <xsl:value-of select="name"/><!-- Condition multiple : mettre l’âge en gras si taille>200 -->
                <xsl:choose>
                    <xsl:when test="height &gt; 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)
  1. ActiveXObject n’est disponible que sur les anciennes versions d’IE, incompatible avec Chrome et Firefox modernes ;
  2. 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.

  1. Utiliser un moteur XSLT au niveau backend (Java / PHP / .NET…) pour convertir préalablement XML + XSL en XHTML ;
  2. Envoyer directement la page HTML générée au navigateur ;
  3. 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.

  1. Situer les nœuds XML à l’aide d’expressions de chemin (semblable aux chemins de fichiers) ;
  2. Bibliothèque de fonctions standard intégrée pour calculs numériques et traitements de chaînes ;
  3. Norme officielle W3C ;
  4. Toutes les expressions dans select="" et test="" suivent la syntaxe XPath.

Résumé

BaliseCas d’usageCaractéristique de branchement
<xsl:if>Condition simpleSeulement la branche vraie, pas de else
<xsl:choose>Branchements multiplesPlusieurs when + otherwise (équivaut à else)

Branchements multiples

Next:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *