Séquences ordonnées : xsl:perform-sort
Fondamental : Cré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.
Attention : Placement 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.
Exemple : Ré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
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
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 :