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

Séquences ordonnées : xsl:perform-sort

FondamentalCréer une séquence ordonnée avec xsl:perform-sort

L'instruction xsl:perform-sort permet de créer une séquence (un groupe de nœuds ou de valeurs atomiques) ordonnée.

CTRL+C pour copier, CTRL+V pour coller
1
<xsl:perform-sort select? = expression>
2
  <!-- Content: (xsl:sort+, sequence-constructor) -->
3
</xsl:perform-sort>
<xsl:perform-sort select? = expression>
  <!-- Content: (xsl:sort+, sequence-constructor) -->
</xsl:perform-sort>

AttentionPlacement de xsl:perform-sort

Cette instruction s'utilise à l’extérieur de xsl:for-each et de xsl:apply-templates.

Un xsl:sort doit être lancer à l'intérieur de xsl:perform-sort.

ExempleRécupérer une liste de ville et la trier

Premièrement, on va mettre la séquence de villes triées dans une variable.

Puis, on affichera le contenu de cette variable.

XML source :

CTRL+C pour copier, CTRL+V pour coller
1
<?xml version="1.0" encoding="UTF-8"?>
2
<persons>
3
    <person age='38'>
4
        <surname>White</surname>
5
        <town>Albuquerque</town>
6
    </person>
7
    <person age='22'>
8
        <surname>Stonem</surname>
9
        <town>London</town>
10
    </person>
11
    <person age='31'>
12
        <surname>Reyes</surname>
13
        <town>Los Angeles</town>
14
    </person>
15
</persons>
<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person age='38'>
        <surname>White</surname>
        <town>Albuquerque</town>
    </person>
    <person age='22'>
        <surname>Stonem</surname>
        <town>London</town>
    </person>
    <person age='31'>
        <surname>Reyes</surname>
        <town>Los Angeles</town>
    </person>
</persons>

XSLT :

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="text"/>
5
6
    <xsl:template match="/">
7
        <xsl:variable name="sortedTowns" as="xs:string*">
8
            <xsl:perform-sort select="persons/person/town">
9
                <xsl:sort select="." order="ascending" data-type="text"/>
10
            </xsl:perform-sort>
11
        </xsl:variable>
12
        <xsl:value-of select="$sortedTowns"></xsl:value-of>
13
    </xsl:template>
14
15
</xsl:stylesheet>
<?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="text"/>

    <xsl:template match="/">
        <xsl:variable name="sortedTowns" as="xs:string*">
            <xsl:perform-sort select="persons/person/town">
                <xsl:sort select="." order="ascending" data-type="text"/>
            </xsl:perform-sort>
        </xsl:variable>
        <xsl:value-of select="$sortedTowns"></xsl:value-of>
    </xsl:template>

</xsl:stylesheet>

Texte obtenu :

CTRL+C pour copier, CTRL+V pour coller
1
Albuquerque London Los Angeles
Albuquerque London Los Angeles
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)