<html>
<head>
<title>&lt;xsl:sort&gt;</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div id="Beschreibung">
<table cellpadding="0" cellspacing="0" border="0" width="100%" class="main">
<tr>
<td valign="top" class="NAME">&lt;xsl:sort&gt;</td>
<td valign="top" class="COMPATIBILITY">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="divider"><img src="dwres:18084" width="100%" height="1"></td>
</tr>
<tr>
<td valign="top" colspan="2" class="description">
Mit dieser Anweisung l&auml;sst sich ein Sortierschl&uuml;ssel f&uuml;r den aktuellen Kontext definieren. Dieses Element wird dem Element <span class="LITERAL">&lt;xsl:apply-templates&gt;</span> oder dem Element <span class="LITERAL">&lt;xsl:for-each&gt;</span> untergeordnet. Innerhalb dieser Elemente definiert die erste <span class="LITERAL">&lt;xsl:sort&gt;</span>-Anweisung den prim&auml;ren Sortierschl&uuml;ssel, die zweite <span class="LITERAL">&lt;xsl:sort&gt;</span>-Anweisung den sekund&auml;ren Sortierschl&uuml;ssel, usw.</td></tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Kategorie</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>Untergeordnete Anweisung (<span class="LITERAL">&lt;xsl:sort&gt;</span> ist immer dem Element <span class="LITERAL">&lt;xsl:apply-templates&gt;</span> oder dem Element <span class="LITERAL">&lt;xsl:for-each&gt;</span> untergeordnet)</p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Obligatorische Attribute</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>Keine</p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Optionale Attribute</td>
</tr>
<tr>
<td colspan="2" class="description">
<dl>
<dt>
select
</dt>
<dd>
Ein XPath-Ausdruck, der die zu sortierenden Knoten definiert.
<P></p>
<dt>
lang
</dt>
<dd>
Ein String, der die beim Sortieren zu verwendende Sprache definiert. Die Sprachencodes sind in RFC1766 definiert, das unter <systemitem role="url">http://www.ietf.org/rfc/rfc1766.txt</systemitem> verf&uuml;gbar ist.
<P></p>
<dt>
data-type
</dt>
<dd>
Ein Attribut, das den Datentyp der zu sortierenden Elemente definiert. Zul&auml;ssige Werte sind <span class="LITERAL">
number
</span> und <span class="LITERAL">
text
</span>; der Standard ist <span class="LITERAL">
text
</span>. Ein XSLT-Prozessor hat die M&ouml;glichkeit, auch andere Werte zu unterst&uuml;tzen. Wenn Sie z.&nbsp;B. die Werte <span class="LITERAL">
32 10 120
</span> mit <span class="LITERAL">
data-type=
"
text
"
</span> sortieren, so ist das Ergebnis <span class="LITERAL">
10 120 32
</span>, w&auml;hrend mit <span class="LITERAL">
data-type=
"
number
"
</span> das Ergebnis <span class="LITERAL">
10 32 120
</span> ist.
<P></p>
<dt>
order
</dt>
<dd>
Ein Attribut, das die Reihenfolge der Sortierung bestimmt. Zul&auml;ssige Werte sind <span class="LITERAL">
ascending
</span> (aufsteigend) und <span class="LITERAL">
descending
</span> (absteigend).
<P></p>
<dt>
case-order
</dt>
<dd>
Dieses Attribut bestimmt, in welcher Reihenfolge Gro&szlig;- und Kleinbuchstaben sortiert werden. Zul&auml;ssige Werte sind <span class="LITERAL"> upper-first </span> (Gro&szlig;buchstaben zuerst) und <span class="LITERAL"> lower-first </span> (Kleinbuchstaben zuerst).
<P></p>
</dl>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Inhalt</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>Keiner</p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">&Uuml;bergeordnete Elemente</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>
<span class="LITERAL">&lt;xsl:apply-templates&gt;</span> und <span class="LITERAL">&lt;xsl:for-each&gt;</span></p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Definition</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>XSLT-Abschnitt 10, Sortierung</p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Beispiel</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>Die Funktionsweise der Anweisung <span class="LITERAL">&lt;xsl:sort&gt;</span> wird durch das folgende Stylesheet veranschaulicht:</p>
<span class="PROGRAMLISTING"><pre>
&lt;?xml version="1.0"?&gt;
&lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;

  &lt;xsl:output method="text"/&gt;

  &lt;xsl:variable name="newline"&gt;
&lt;xsl:text&gt;
&lt;/xsl:text&gt;
  &lt;/xsl:variable&gt;

  &lt;xsl:template match="/"&gt;
    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:call-template name="ascending-alpha-sort"&gt;
      &lt;xsl:with-param name="items" select="/sample/textlist/listitem"/&gt;
    &lt;/xsl:call-template&gt;
    &lt;xsl:call-template name="ascending-alpha-sort"&gt;
      &lt;xsl:with-param name="items" select="/sample/numericlist/listitem"/&gt;
    &lt;/xsl:call-template&gt;
    &lt;xsl:call-template name="ascending-numeric-sort"&gt;
      &lt;xsl:with-param name="items" select="/sample/numericlist/listitem"/&gt;
    &lt;/xsl:call-template&gt;
    &lt;xsl:call-template name="descending-alpha-sort"&gt;
      &lt;xsl:with-param name="items" select="/sample/textlist/listitem"/&gt;
    &lt;/xsl:call-template&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name="ascending-alpha-sort"&gt;
    &lt;xsl:param name="items"/&gt;
    &lt;xsl:text&gt;Ascending text sort:&lt;/xsl:text&gt;
    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:for-each select="$items"&gt;
      &lt;xsl:sort select="."/&gt;
      &lt;xsl:value-of select="."/&gt;
      &lt;xsl:value-of select="$newline"/&gt;
    &lt;/xsl:for-each&gt;
    &lt;xsl:value-of select="$newline"/&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name="descending-alpha-sort"&gt;
    &lt;xsl:param name="items"/&gt;
    &lt;xsl:text&gt;Descending text sort:&lt;/xsl:text&gt;
    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:for-each select="$items"&gt;
      &lt;xsl:sort select="." order="descending"/&gt;
      &lt;xsl:value-of select="."/&gt;
      &lt;xsl:value-of select="$newline"/&gt;
    &lt;/xsl:for-each&gt;
    &lt;xsl:value-of select="$newline"/&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template name="ascending-numeric-sort"&gt;
    &lt;xsl:param name="items"/&gt;
    &lt;xsl:text&gt;Ascending numeric sort:&lt;/xsl:text&gt;
    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:for-each select="$items"&gt;
      &lt;xsl:sort select="." data-type="number"/&gt;
      &lt;xsl:value-of select="."/&gt;
      &lt;xsl:value-of select="$newline"/&gt;
    &lt;/xsl:for-each&gt;
    &lt;xsl:value-of select="$newline"/&gt;
  &lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;</pre></span>
<p>Das Stylesheet definiert drei benannte Vorlagen (Templates), von denen jede das Element <span class="LITERAL">&lt;listitem&gt;</span> in einer anderen Reihenfolge oder mit unterschiedlichem Datentyp (<span class="LITERAL">data-type</span>) sortiert. Das Stylesheet wird auf das folgende Dokument angewendet:</p>
<span class="PROGRAMLISTING"><pre>
&lt;?xml version="1.0"?&gt;
&lt;sample&gt;
  &lt;numericlist&gt;
    &lt;listitem&gt;1&lt;/listitem&gt;
    &lt;listitem&gt;3&lt;/listitem&gt;
    &lt;listitem&gt;23&lt;/listitem&gt;
    &lt;listitem&gt;120&lt;/listitem&gt;
    &lt;listitem&gt;2&lt;/listitem&gt;
  &lt;/numericlist&gt;
  &lt;textlist&gt;
    &lt;listitem&gt;3&lt;/listitem&gt;
    &lt;listitem&gt;apple&lt;/listitem&gt;
    &lt;listitem&gt;orange&lt;/listitem&gt;
    &lt;listitem&gt;dragonfruit&lt;/listitem&gt;
    &lt;listitem&gt;carambola&lt;/listitem&gt;
  &lt;/textlist&gt;
&lt;/sample&gt;</pre></span> <!--<?troff .Nd 10?>-->
<p>Hier die Ergebnisse:</p>
<span class="PROGRAMLISTING"><pre>

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</pre></span>
<p>Beachten Sie, dass das Attribut <span class="LITERAL">data-type="numeric"</span> daf&uuml;r sorgt, dass die Daten in numerischer Reihenfolge sortiert werden. </p>
</td>
</tr>
</table>
</div>
</body>
</html>
