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