Uzly, které chceme zpracovat pomocí <xsl:for-each> a <xsl:apply-templates>, můžeme před zpracováním seřadit podle různých kritérií. Uzly se pak nezpracovávají v pořadí daném dokumentem, ale v pořadí definovaném tříděním.
Kritéria třídění se určují pomocí instrukce <xsl:sort>, která se jako první uvádí uvnitř <xsl:for-each> nebo <xsl:apply-templates>.
Třídění se ovládá pomocí následujících atributů:
Výraz, který vybere hodnoty, podle kterých se provede řazení.
Standardně se provádí lexikografické porovnávání, pokud chceme hodnoty vybrané pomocí select porovnávat jako čísla, musíme změnit datový typ na number (implicitní je text).
Výběr vzestupného (ascending) nebo sestupného (descending) uspořádání.
Kód jazyka, jehož pravidla se mají použít pro porovnávání. Ne všechny procesory tuto vlastnost podporují.
Mají se velká písmena řadit před malá (upper-first nebo lower-first).
Příklad 6.1. Seřazení citátů podle abecedy – citaty-podle-abecedy.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="html" encoding="windows-1250"/>
<xsl:template match="citaty">
<html>
<head>
<title>Citáty podle abecedy</title>
</head>
<body>
<xsl:for-each select="citat">
<xsl:sort select="text"/>
<p>
<xsl:value-of select="text"/>
<xsl:text> - </xsl:text>
<xsl:value-of select="autor"/>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>Pokud chceme řadit podle několika kritérií najednou, stačí uvést několik instrukcí <xsl:sort> za sebou. Pokud se kritérium z prvního řazení pro některé uzly shoduje, rozhodnou o výsledném pořadí následující specifikace řazení.
Následující ukázka seřadí citáty primárně podle jména autora a sekundárně podle textu citátu.
Příklad 6.2. Víceúrovňové řazení – citaty-podle-autoru3.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="html" encoding="windows-1250"/>
<xsl:template match="citaty">
<html>
<head>
<title>Citáty podle abecedy</title>
</head>
<body>
<xsl:for-each select="citat">
<xsl:sort select="autor"/>
<xsl:sort select="text"/>
<p>
<xsl:value-of select="autor"/>
<xsl:text> - </xsl:text>
<xsl:value-of select="text"/>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>