xsl:sort permet d'effectuer un tri des données
Si le fichier se présente de la façon suivante :
<TARGETFIELD FIELDNUMBER="1">
<TARGETFIELD FIELDNUMBER="3">
<TARGETFIELD FIELDNUMBER="1024">
<TARGETFIELD FIELDNUMBER="5">
...
alors, l'on utilise :
<xsl:apply-templates select="TARGETFIELD">
<xsl:sort select="@FIELDNUMBER" data-type="number"/>
</xsl:apply-templates>
ce qui permet de trier les balises TARGETFIELD selon leur attribut FIELDNUMBER de type number. Si data-type n'est pas précisé, il s'agit d'une chaîne de caractère (par défaut)
<TARGETFIELD FIELDNUMBER="1">
<TARGETFIELD FIELDNUMBER="2">
<TARGETFIELD FIELDNUMBER="3">
<TARGETFIELD FIELDNUMBER="4">
...
Si le fichier se présente de la façon suivante :
<TARGETFIELD>
<FIELDNUMBER>1</FIELDNUMBER>
<FIELDNUMBER>3</FIELDNUMBER>
<FIELDNUMBER>1024</FIELDNUMBER>
<FIELDNUMBER>12</FIELDNUMBER>
...
</TARGETFIELD>
Ou bien, lorsqu'on veut trier sur un champ fils :
<xsl:apply-templates select="TARGETFIELD">
<xsl:sort select="FIELDNUMBER" data-type="number"/>
</xsl:apply-templates>
Ce qui permet de tri la balise, sur ses champs fils (dans l'ordre croissant par défaut) :
<TARGETFIELD>
<FIELDNUMBER>1</FIELDNUMBER>
<FIELDNUMBER>2</FIELDNUMBER>
<FIELDNUMBER>3</FIELDNUMBER>
<FIELDNUMBER>4</FIELDNUMBER>
...
</TARGETFIELD>
Pour trier dans un sens bien précis, il suffit de le préciser avec l'attribut order :
<xsl:apply-templates select="TARGETFIELD">
<xsl:sort select="FIELDNUMBER" order="ascending"/>
</xsl:apply-templates>
ou bien
<xsl:apply-templates select="TARGETFIELD">
<xsl:sort select="FIELDNUMBER" order="descending"/>
</xsl:apply-templates>
Si l'on veut trier sur plusieurs champs ou des balises sur plusieurs attributs, chaque balise xsl:sort ne permettant que de trier un champ, il faut ajouter autant de xsl:sort qu'il y a de champs à trier, selon leur ordre d'importance :
<xsl:apply-templates select="CONNECTOR">
<xsl:sort select="@FROMINSTANCE"/>
<xsl:sort select="@FROMFIELD"/>
<xsl:sort select="@TOINSTANCE"/>
</xsl:apply-templates>