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