Application des modèles dans l’ordre inverse avec XSLT

Lorsque vous travaillez avec des données XML, vous pouvez rencontrer des scénarios où vous devez manipuler l’ordre dans lequel les éléments sont affichés. Un besoin courant est d’afficher le contenu des nœuds dans l’ordre inverse. Cet article de blog vous guidera à travers le processus d’atteindre cet objectif en utilisant XSLT (Transformations de Langage de Feuilles de Style Élargi).

Comprendre le problème

Considérons la structure XML suivante :

<root>
    <node>x</node>
    <node>y</node>
    <node>a</node>
</root>

Dans cet exemple, vous souhaitez afficher le contenu des éléments <node> dans l’ordre inverse, ce qui donnera en sortie : ayx. C’est une tâche typique qui peut être accomplie avec XSLT en utilisant apply-templates et les attributs de tri.

La solution : inverser l’ordre des nœuds

Pour obtenir le résultat souhaité (c’est-à-dire afficher les nœuds dans l’ordre inverse), nous allons utiliser l’élément xsl:sort à l’intérieur de apply-templates. Voici comment procéder étape par étape :

Étape 1 : Correspondance avec le modèle racine

Commencez par faire correspondre le niveau racine de votre document XML. Dans ce modèle, vous appliquerez des modèles aux éléments <node> tout en utilisant la fonction sort pour inverser l’ordre.

<xsl:template match="/">
    <xsl:apply-templates select="root/node">
        <xsl:sort select="position()" data-type="number" order="descending"/>
    </xsl:apply-templates>
</xsl:template>
  • <xsl:template match="/"> : Cela correspond à la racine du document XML.
  • <xsl:apply-templates select="root/node"> : Cette directive sélectionne tous les éléments <node> à traiter.
  • <xsl:sort select="position()" data-type="number" order="descending"/> : Cela trie les nœuds en fonction de leur position dans l’ordre décroissant, ce qui est crucial pour les afficher à l’envers.

Étape 2 : Définir le modèle de nœud

Ensuite, vous aurez besoin d’un autre modèle pour gérer comment chaque <node> est traité. Cela affichera simplement la valeur de chaque élément <node>.

<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>
  • <xsl:template match="node"> : Ce modèle correspond à chaque élément <node>.
  • <xsl:value-of select="."/> : Cela récupère la valeur de chaîne du nœud actuel et l’affiche.

Code XSLT complet

En combinant les deux modèles, vous aurez le code XSLT complet suivant :

<xsl:template match="/">
    <xsl:apply-templates select="root/node">
        <xsl:sort select="position()" data-type="number" order="descending"/>
    </xsl:apply-templates>
</xsl:template>

<xsl:template match="node">
    <xsl:value-of select="."/>
</xsl:template>

Sortie

Après avoir appliqué ce code XSLT à l’XML fourni, le résultat affichera les valeurs des nœuds dans l’ordre inverse de leur apparition :

ayx

Conclusion

Inverser l’ordre des nœuds XML en utilisant apply-templates dans XSLT est simple une fois que vous comprenez comment utiliser efficacement l’opération sort. Cette approche est bénéfique lorsque vous devez manipuler la présentation des données pour des rapports ou des applications web afin d’améliorer l’expérience utilisateur.

En suivant ces étapes, vous pouvez contrôler efficacement la sortie de vos données XML avec XSLT. Bon codage !