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