xsl:number

Syntax

<xsl:number/>


Postition

innerhalb des Template-Bodys


Attribute
Bezeichnung Wert Bedeutung
level "single | multiple | any" definiert, wie eine Sequenzzahl, basierend auf der Position des Knotens, generiert wird
count Pattern definiert, welche Knoten gezählt werden sollen, um eine Knotensequenz zu bestimmen
from Pattern definiert den Knoten, an dem der Prozessor seine Suche stoppen soll
value Expression anstelle einer Knotensequenzzahl zu formatierende Zahl
format {format-string} definiert das Outputformat der Zahl
lang {language-code} definiert die Sprache, nach deren Konventionen sich die Formatierung der Zahl richten soll
letter-value {"alphabetic | traditional"} unterscheidet zwischen den verschiedenen Nummerierungsschemata der gleichen Sprache
grouping-separator {character} Zeichen, das eine Gruppe von Ziffern trennt
grouping-size {number} Anzahl von Ziffern, die gruppiert werden

<xsl:number>

kann eine Sequenzzahl, basierend auf der aktuellen Postion des Knotens, ermitteln und / oder eine Zahl für den Output formatieren. Die Berechnung der Sequenzzahl ergibt sich aus der spezifischen Level-Regel. Ist keine angegeben, wird als Level "single" angenommen. Nachdem die Zahl ermittelt worden ist, wird sie durch die angebenen Attribute formatiert und an die aktuelle Position des Output-Dokuments als String ausgegeben.

Level Regel
single Die Nummerierung der Knoten erfolgt auf dem gleichen Level: Zunächst wird der Ausgangsknoten bestimmt. Entspricht der aktuelle Knoten dem [count] Attribut, ist er der Ausgangsknoten. Andernfalls sucht der Prozessor ein Vorgängerknoten, der dem [count] Attribut entspricht und stoppt (falls angegeben) bei dem Knoten, der dem [from] Attribut entspricht. Konnte ein Ausgangsknoten bestimmt werden, wird die Sequenzzahl ermittelt. Sie entspricht der Anzahl der gleichartigen Vorgängerknoten plus dem Ausgangsknoten. Konnte kein Ausgangsknoten ermittelt werden, ist das Ergebnis eine leere Liste.
any Die Nummerierung der Knoten erfolgt auf einem beliebigen Level: Ausgehend von der aktuellen Position, sucht der Prozessor in aufsteigender Reihenfolge nach Knoten, die dem [count] Attribut enstsprechen. Ist das [from] Attribut definiert, stoppt der Prozessor seinen Suchprozess an dem angegebenen Knoten. Andernfalls stoppt er, wenn er den Rootknoten erreicht hat. Das Ergebnis ist die Anzahl der gefunden Knoten. Attribut- und Namespaceknoten werden ignoriert.
multiple Es wird eine zusammengesetzte Sequenznummer erstellt, welche die hierarchische Position des Knotens darstellt: Ausgehend vom aktuellen Knoten, generiert der Prozessor eine Liste aller Vorgängerknoten und stoppt (falls angegeben) bei dem Knoten, welcher dem [from] Attribute entspricht. Dieser Knoten wird allerdings nicht der Liste hinzugefügt. Jeder Knoten in der generierten Liste, der dem [count] Attribut entspricht, erhält als Zahl die Anzahl der Vorgängerknoten, die auf dem gleichen Level liegen.
Formatierungs-Token Output-Sequenz
1 1, 2, 3, 4, ...
01 01, 02, 03, …, 10, 11, 12, …
a a, b, c, d, …, x, y, z, aa, ab, ac, …
A A, B, C, D, …, X, Y, Z, AA, AB, AC, …
i i, ii, iii, iv, …, x, xi, xii, xiii, xiv, …
I I, II, III, IV, …, X, XI, XII, XIII, XIV

- die n-te Zahl der Sequenz wird mit dem n-ten Token der Formatierungsanweisung formatiert
- falls mehrere Zahlen in der Sequenz existieren als Token in der Formatierungsanweisung, werden die restlichen
  Zahlen mit dem letzten Formatierungstoken formatiert
- existieren keine Formatierungsanweisungen, ist der Formatierungstoken "1"
- falls weniger Zahlen in der Sequenz existieren als Token in der Formatierungsanweisung, werden die restlichen   Formatierungstoken ignoriert


Definition

XSLT Kapitel 7.7


Beispiel

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
<xsl:output method="html"/>

<xsl:template match="/">
     <HTML>
          <HEAD>
               <TITLE>Element: &lt;xsl:number&gt; / Beispiel 01</TITLE>
          </HEAD>
          <BODY>
               <xsl:apply-templates select="shop"/>
          </BODY>
     </HTML>
</xsl:template>

<xsl:template match="shop">
     <TABLE BORDER="1">
          <TR>
               <TH WIDTH="50">Nr:</TH>
               <TH WIDTH="150">Abteilung:</TH>
               <TH WIDTH="100">Artikel:</TH>
               <TH WIDTH="100">Preis:</TH>
          </TR>
          <xsl:apply-templates select="order/product"/>
     </TABLE>
</xsl:template>

<xsl:template match="product">
     <TR>
          <TD><xsl:number level="single" count="product" from="shop" format="i"/></TD>
          <TD><xsl:value-of select="@department"/></TD>
          <TD><xsl:value-of select="name"/></TD>
          <TD ALIGN="RIGHT">
               <xsl:number value="price" grouping-separator="." grouping-size="3"/>
               <xsl:text> </xsl:text>
               <xsl:value-of select="currency"/>
          </TD>
     </TR>
</xsl:template>

</xsl:stylesheet>


© 2001 by Timo Schäfer