<xsl:sort>  
Mit dieser Anweisung lässt sich ein Sortierschlüssel für den aktuellen Kontext definieren. Dieses Element wird dem Element <xsl:apply-templates> oder dem Element <xsl:for-each> untergeordnet. Innerhalb dieser Elemente definiert die erste <xsl:sort>-Anweisung den primären Sortierschlüssel, die zweite <xsl:sort>-Anweisung den sekundären Sortierschlüssel, usw.
 
Kategorie

Untergeordnete Anweisung (<xsl:sort> ist immer dem Element <xsl:apply-templates> oder dem Element <xsl:for-each> untergeordnet)

 
Obligatorische Attribute

Keine

 
Optionale Attribute
select
Ein XPath-Ausdruck, der die zu sortierenden Knoten definiert.

lang
Ein String, der die beim Sortieren zu verwendende Sprache definiert. Die Sprachencodes sind in RFC1766 definiert, das unter http://www.ietf.org/rfc/rfc1766.txt verfügbar ist.

data-type
Ein Attribut, das den Datentyp der zu sortierenden Elemente definiert. Zulässige Werte sind number und text ; der Standard ist text . Ein XSLT-Prozessor hat die Möglichkeit, auch andere Werte zu unterstützen. Wenn Sie z. B. die Werte 32 10 120 mit data-type= " text " sortieren, so ist das Ergebnis 10 120 32 , während mit data-type= " number " das Ergebnis 10 32 120 ist.

order
Ein Attribut, das die Reihenfolge der Sortierung bestimmt. Zulässige Werte sind ascending (aufsteigend) und descending (absteigend).

case-order
Dieses Attribut bestimmt, in welcher Reihenfolge Groß- und Kleinbuchstaben sortiert werden. Zulässige Werte sind upper-first (Großbuchstaben zuerst) und lower-first (Kleinbuchstaben zuerst).

 
Inhalt

Keiner

 
Übergeordnete Elemente

<xsl:apply-templates> und <xsl:for-each>

 
Definition

XSLT-Abschnitt 10, Sortierung

 
Beispiel

Die Funktionsweise der Anweisung <xsl:sort> wird durch das folgende Stylesheet veranschaulicht:

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

Das Stylesheet definiert drei benannte Vorlagen (Templates), von denen jede das Element <listitem> in einer anderen Reihenfolge oder mit unterschiedlichem Datentyp (data-type) sortiert. Das Stylesheet wird auf das folgende Dokument angewendet:

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

Hier die Ergebnisse:


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

Beachten Sie, dass das Attribut data-type="numeric" dafür sorgt, dass die Daten in numerischer Reihenfolge sortiert werden.