Inserting Automatic Numbering Using <xsl:number>
The <xsl:number>
element is useful for generating hierarchical strings of numbers that indicate the depth to which a particular portion of a document is nested. For example, a hypothetical document outline might appear as follows:
I. Major Heading #1
I.A. First sub-heading under Major Heading #1
I.A.1. ...
I.A.2. ...
I.B. Second sub-heading under Major Heading #1
II. Major heading #2
...
The cardgame.xml file in Inserting Automatic Numbering Using position() is a hierarchy that lends itself to this kind of numbering. Each hand dealt is a level. Each hand level contains a level representing each player. For each player, there up to five cards dealt. The hands themselves have already been numbered, using the position()
function. Now we'll use <xsl:number>
to number the players and their cards.
The following is the general form of the start tag for an <xsl:number>
element.
<xsl:number level="depthofnumbering" count="pattern" from="pattern" value="expression" format="formatspec" lang="langcode" letter-value="alphaortrad" grouping-separator="character" grouping-size="number">
All of the attributes are optional. The ones we'll be concerned with in this section (and the ones you will probably use most often) are level
, count
, and format
.
Without any attributes at all, <xsl:number>
behaves the same way as the position()
function does, as demonstrated earlier.
Now we'll add the following template rule to our existing style sheet, cardgame_orig.xsl. This style sheet is available in Inserting Automatic Numbering Using position().
<xsl:template match="player">
<h2>
Player <xsl:number/>
:
<xsl:value-of select="@name"/>
</h2>
<xsl:apply-templates/>
</xsl:template>
The new template rule displays the each player's position within each hand, as in the level-2 headings shown here:
Suppose, however, that we want to number the players more carefully, using a combination of the hand number and the position of the <player>
element within that hand. We can use <xsl:number>
with level="multiple"
, level="single"
, or level="any"
.
This section continues with the following topics:
- Using level="multiple" for Numbering
- Using level="single" for Numbering
- Using level="any" for Numbering
- Example of Automatic Numbering with <xsl:number>