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 !