<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.