Nummerierung und Sortierung
XSLT bietet zwei Elemente an, um auf einfache Art und Weise Knoten fortlaufend zu nummerieren und /oder zu sortieren. In den folgenden beiden Abschnitten werden wir auf die Nummerierung und Sortierung von Knoten separat eingehen.
Nummerierung
Das leere XSLT-Element number
erlaubt es, eine fortlaufende Nummerierung zu erzeugen. Das Element kann
dabei direkt innerhalb eines Templates oder aber auch innerhalb einer Schleife vorkommen. Das wichtigste Attribut ist
format
, in welchem das Nummernformat angegeben wird. Dabei können als Werte die Präfixe 1
(für 1, 2, 3, 4, 5, ...), i
(für i, ii, iii, iv, v, ...), I
(für I, II, III, IV, V, ...),
a
(für a, b, c, d, e, ...) und A
(für A, B, C, D, E, ...) angegeben werden. Möchten Sie z. B.
eine zweistellige Nummerierung, so können Sie 01
(für 01, 02, 03, 04, 05, ..., 10, 11, 12, 13, 14, 15,
...) angeben. Auch die Eingabe von Leerzeichen oder weiteren Zeichen wie .
oder )
sind möglich.
Das Attribut value
erlaubt das Festlegen eines „manuellen“ Werts. Verwendet wird dies immer dann, wenn das
number
-Element nur zur Formatierung einer einzelnen Zahl genutzt werden soll. Weitere optionale
Attribute sind unter anderem grouping-separator
(Trennzeichen für die Zifferngruppierung),
grouping-size
(Ziffernanzahl für die Zifferngruppierung) und count
(Knoten, welche nummeriert
werden sollen bzw. bei welchen die Nummerierung fortläuft, Angabe als XPath-Ausdruck).
XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml-stylesheet href="nummerieren.xsl" type="text/xsl" ?> <zahlen> <zahl>45</zahl> <zahl>39</zahl> <zahl>22</zahl> <zahl>70</zahl> <zahl>68</zahl> <zahl>12</zahl> <zahl>51</zahl> <zahl>63</zahl> <zahl>27</zahl> <zahl>94</zahl> </zahlen>
XSLT-Code:
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>Nummerierung - XSLT Code-Beispiel</title> <meta charset="utf-8" /> <meta name="robots" content="noindex,nofollow" /> <meta name="publisher" content="Homepage-Webhilfe" /> </head> <body> <xsl:for-each select="/zahlen/zahl"> <span><xsl:number format="1. " /><xsl:value-of select="." /></span><br /> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
Sortierung
Um eine Reihe an Knoten zu sortieren, gibt es das einteilige Element sort
. Mit Hilfe des Attributs select
können Sie festlegen, an Hand welcher Knoten die Sortierung erfolgen soll. Wird das Attribut weggelassen, so werden die
„aktuellen“ Knoten sortiert. Um festzulegen, ob die Sortierung auf- oder absteigend erfolgen soll, können Sie das
Attribut order
mit den Werten ascending
(aufsteigend, Voreinstellung) oder descending
(absteigend) verwenden. Das data-type
-Attribut ermöglicht es, festzulegen, dass die Sortierung an Hand nummerischer
Werte (number
) und nicht an Hand von zeichenbasierten Werten (text
, Standardeinstellung) erfolgen
soll. Bei der Sortierung von Text kann mit Hilfe des Attributs case-order
festgelegt werden, ob Großbuchstaben vor
Kleinbuchstaben (upper-first
) oder Kleinbuchstaben vor Großbuchstaben (lower-first
) kommen. Das
sort
-Element kann innerhalb einer Schleife (for-each
-Element) oder innerhalb des apply-templates
-Element
(Notation erfolgt dann zweiteilig) vorkommen. Wird das Element innerhalb von apply-templates
verwendet, so sollte bei
diesem das select
-Attribut angegeben werden.
XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml-stylesheet href="sortieren.xsl" type="text/xsl" ?> <zahlen> <zahl>45</zahl> <zahl>39</zahl> <zahl>22</zahl> <zahl>70</zahl> <zahl>68</zahl> <zahl>12</zahl> <zahl>51</zahl> <zahl>63</zahl> <zahl>27</zahl> <zahl>94</zahl> </zahlen>
XSLT-Code:
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>Sortierung - XSLT Code-Beispiel</title> <meta charset="utf-8" /> <meta name="robots" content="noindex,nofollow" /> <meta name="publisher" content="Homepage-Webhilfe" /> </head> <body> <ul> <xsl:for-each select="/zahlen/zahl"> <xsl:sort data-type="number" order="descending" /> <li><xsl:value-of select="." /></li> </xsl:for-each> </ul> </body> </html> </xsl:template> </xsl:stylesheet>