<xsl:sort>  
Définit une clé de tri pour le contexte actuel. Cet élément apparaît comme un enfant des éléments <xsl:apply-templates> ou <xsl:for-each>. Dans ces éléments, le premier <xsl:sort> définit la clé de tri principale, le second <xsl:sort> définit la clé de tri secondaire, etc.
 
Catégorie

Subinstruction (<xsl:sort> apparaît toujours comme un enfant des éléments <xsl:apply-templates> ou <xsl:for-each>)

 
Attributs obligatoires

Aucun.

 
Attributs facultatifs
select
Une expression XPath qui définit les nœuds à trier.

lang
Une chaîne qui définit le langage utilisé par le tri. Les codes de langage sont définis dans RFC1766, disponible à l'adresse suivante http://www.ietf.org/rfc/rfc1766.txt .

data-type
Un attribut qui définit le type d'éléments à trier. Les valeurs admises sont number et text ; la valeur par défaut est text. Un processeur XSLT a également la possibilité de prendre en charge d'autres valeurs. Trier les valeurs 32 10 120 avec data-type= " text " renvoie 10 120 32, alors que data-type= " number " renvoie 10 32 120.

order
un attribut qui définit l'ordre du tri. Les valeurs admises sont ascending et descending.

case-order
Un attribut qui définit l'ordre dans lequel les majucules et minuscules sont triées. Les valeurs admises sont upper-first et lower-first.

 
Contenu

Aucun.

 
Apparaît dans

<xsl:apply-templates> et <xsl:for-each>.

 
Défini dans

XSLT section 10, Tri.

 
Exemple

La feuille de style suivante illustre le fonctionnement de l'élément <xsl:sort> :

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="text"/>

  <xsl:variable name="newline">
<xsl:text>
</xsl:text>
  </xsl:variable>

  <xsl:template match="/">
    <xsl:value-of select="$newline"/>
    <xsl:call-template name="ascending-alpha-sort">
      <xsl:with-param name="items" select="/sample/textlist/listitem"/>
    </xsl:call-template>
    <xsl:call-template name="ascending-alpha-sort">
      <xsl:with-param name="items" select="/sample/numericlist/listitem"/>
    </xsl:call-template>
    <xsl:call-template name="ascending-numeric-sort">
      <xsl:with-param name="items" select="/sample/numericlist/listitem"/>
    </xsl:call-template>
    <xsl:call-template name="descending-alpha-sort">
      <xsl:with-param name="items" select="/sample/textlist/listitem"/>
    </xsl:call-template>
  </xsl:template>

  <xsl:template name="ascending-alpha-sort">
    <xsl:param name="items"/>
    <xsl:text>Ascending text sort:</xsl:text>
    <xsl:value-of select="$newline"/>
    <xsl:for-each select="$items">
      <xsl:sort select="."/>
      <xsl:value-of select="."/>
      <xsl:value-of select="$newline"/>
    </xsl:for-each>
    <xsl:value-of select="$newline"/>
  </xsl:template>

  <xsl:template name="descending-alpha-sort">
    <xsl:param name="items"/>
    <xsl:text>Descending text sort:</xsl:text>
    <xsl:value-of select="$newline"/>
    <xsl:for-each select="$items">
      <xsl:sort select="." order="descending"/>
      <xsl:value-of select="."/>
      <xsl:value-of select="$newline"/>
    </xsl:for-each>
    <xsl:value-of select="$newline"/>
  </xsl:template>

  <xsl:template name="ascending-numeric-sort">
    <xsl:param name="items"/>
    <xsl:text>Ascending numeric sort:</xsl:text>
    <xsl:value-of select="$newline"/>
    <xsl:for-each select="$items">
      <xsl:sort select="." data-type="number"/>
      <xsl:value-of select="."/>
      <xsl:value-of select="$newline"/>
    </xsl:for-each>
    <xsl:value-of select="$newline"/>
  </xsl:template>

</xsl:stylesheet>

La feuille de style définit trois modèles nommés, chacun triant les éléments <listitem> dans un ordre différent ou avec un data-type différent. La feuille de style est appliquée au document suivant :

<?xml version="1.0"?>
<sample>
  <numericlist>
    <listitem>1</listitem>
    <listitem>3</listitem>
    <listitem>23</listitem>
    <listitem>120</listitem>
    <listitem>2</listitem>
  </numericlist>
  <textlist>
    <listitem>3</listitem>
    <listitem>apple</listitem>
    <listitem>orange</listitem>
    <listitem>dragonfruit</listitem>
    <listitem>carambola</listitem>
  </textlist>
</sample>

Les résultats sont les suivants :


Ascending text sort:
3
apple
carambola
dragonfruit
orange

Ascending text sort:
1
120
2
23
3

Ascending numeric sort:
1
2
3
23
120

Descending text sort:
orange
dragonfruit
carambola
apple
3

L'attribut data-type="numeric" génère le tri des données dans un ordre numérique.