XSLT (opérations avancées) : Numérotation et ordonnancement

La numérotation simple avec xsl:number

Introduction

Comme nous venons de le voir, la fonction position ne se prête pas réellement à l'exercice de la numérotation même si elle offre une alternative envisageable dans les cas les plus simples.

Une instruction a spécifiquement été conçue pour faire de la numérotation : xsl:number.

FondamentalNumérotation

L'instruction xsl:number réalise deux choses :

  • Elle fonctionne comme un compteur et permet donc d'évaluer l'indice du nœud courant;

  • Elle transforme l'indice déterminé en chaîne de caractère via des règles de conversion explicitées par le format d'affichage choisi.

Le résultat retourné est un nœud texte.

ComplémentPrincipaux attributs de xsl:number

format : spécifie le format à utiliser pour chaque nombre figurant dans la liste.

level : spécifie les niveaux de l'arborescence source à prendre en considération.

Valeurs possibles : "single", "multiple" et "any". ("single" par défaut).

count : spécifie les nœuds à compter à ces niveaux.

from : spécifie où commence le comptage.

Pour plus d'informations sur les attributs de xsl:number, je vous invite à jeter un œil sur : https://msdn.microsoft.com/fr-fr/library/ms256084%28v=vs.120%29.aspx

ExempleNumérotation d'une liste

Dans cet exemple nous souhaitons récupérer un ensemble d'items pour pouvoir afficher leurs contenus précédés d'une numérotation romaine dépendante de leurs positions dans la liste de nœuds sélectionnés par le for-each.

Voici le XML source :

CTRL+C pour copier, CTRL+V pour coller
1
<?xml version="1.0" encoding="UTF-8"?>
2
<items>
3
    <item>A</item>
4
    <item>B</item>
5
    <item>C</item>
6
    <item>D</item>
7
</items>
<?xml version="1.0" encoding="UTF-8"?>
<items>
    <item>A</item>
    <item>B</item>
    <item>C</item>
    <item>D</item>
</items>

Voici le XSLT servant à faire la transformation :

CTRL+C pour copier, CTRL+V pour coller
1
<?xml version="1.0" encoding="UTF-8"?>
2
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
3
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
4
    <xsl:output method="xml" indent="yes" encoding="iso-8859-1"/>
5
6
    <xsl:template match="items">
7
        <xsl:for-each select="item">
8
            <xsl:number format="I) "/>
9
            <xsl:value-of select="."/>
10
        </xsl:for-each>
11
    </xsl:template>
12
    
13
</xsl:stylesheet>
14
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
    <xsl:output method="xml" indent="yes" encoding="iso-8859-1"/>

    <xsl:template match="items">
        <xsl:for-each select="item">
            <xsl:number format="I) "/>
            <xsl:value-of select="."/>
        </xsl:for-each>
    </xsl:template>
    
</xsl:stylesheet>

Voici le XML en sortie :

CTRL+C pour copier, CTRL+V pour coller
1
<?xml version="1.0" encoding="UTF-8"?>
2
I) A
3
II) B
4
III) C
5
IV) D
<?xml version="1.0" encoding="UTF-8"?>
I) A
II) B
III) C
IV) D
PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Benoît Villain, Thibault Brocheton, Lucas Charrier, Félix Motot, 2013-2016 (Contributions : Stéphane Crozat, les étudiants de l'UTC) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)