<xsl:number> 元素
将格式化的数字插入结果树。
<xsl:number
level = "single" | "multiple" | "any"
count = Pattern
from = Pattern
value = number-expression
format = { string }
lang = { nmtoken }
letter-value = { "alphabetic" | "traditional" }
grouping-separator = { char }
grouping-size = { number } />
特性
level
指定应考虑的源树级别;值为 "single"、"multiple" 和 "any"。默认值为 "single"。count
指定所选级别上应计算的节点的模式。如果未指定 count 属性,默认情况下将采用与当前节点的类型相同的任何节点匹配的模式,如果当前节点具有扩展名称,则为与当前节点的扩展名称相同的任何节点匹配的模式。from
指定计数起始位置的模式。value
指定要转换为数字并输出到结果树的表达式。如果未指定 value 属性,<xsl:number> 元素将根据当前节点在源树中的位置插入一个数字。format
指定列表中的每个数字要使用的格式的标记序列。如果没有格式标记,则使用默认值 1,它生成的序列是 1 2 ...10 11 12....第一个数字之后的每个数字通过分隔符标记与前一个数字分隔,分隔符标记位于用于格式化该数字的格式标记的前面。如果没有分隔符标记,则使用句点字符(“.”)。格式标记
生成的序列
1
1 2 3 4 5 ...10 11 12 ...
01
01 02 03 ...19 10 11 ...99 100 101...
A
A B C ...Z AA AB AC...
i
i ii iii iv v vi vii viii ix x...
I
I II III IV V VI VII VIII IX X...
lang
指定所使用的语言的字母表。如果未指定 lang 值,将根据系统环境确定语言。letter-value
消除使用字母的编号序列之间的歧义。一个编号序列为字母序列中的字母分配数值,另一个编号序列为以该语言的某种其他传统方式为每个字母分配数值。在英语中,对应于格式标记“a”和“i”所指定的编号序列。在某些语言中,每个序列的第一个成员均相同,所以,单独使用格式标记不明确。值 "alphabetic" 指定字母序列;值 "traditional" 指定其他序列。默认值为 "alphabetic"。grouping-separator
提供在十进制编号序列中作为分组(例如千分位)分隔符使用的分隔符。例如,grouping-separator="," 和 grouping-size="3" 生成的数字格式将为 1,000,000。如果只指定了 grouping-separator 和 grouping-size 属性中的一个,将忽略该属性。grouping-size
指定分组的大小(通常为 3)。例如,grouping-separator=","和 grouping-size="3"生成的数字格式将为 1,000,000。如果只指定了 grouping-separator 和 grouping-size 属性中的一个,将忽略该属性。
元素信息
出现次数 |
无限制 |
父元素 |
xsl:copy、xsl:element、xsl:fallback、xsl:for-each、xsl:if、xsl:message、xsl:otherwise、xsl:param、xsl:template、xsl:variable、xsl:when、xsl:with-param、输出元素 |
子元素 |
(无子元素) |
注释
要插入的数字由 value 属性中包含的表达式指定。将计算该表达式,并将生成的对象转换为数字。数字舍入到整数,然后转换为字符串并插入结果树。
<xsl:number> 元素先使用 level、count 和 from 属性构造一个正整数列表:
如果 level="single",将向上转到与计数模式匹配的上级或自身轴中的第一个节点,然后构造一个长度列表,包含 1 加上该上级中与计数模式匹配的前同辈数。如果没有这样的上级,则构造空列表。如果指定了 from 属性,搜索的上级必须是与 from 模式匹配的最近的上级的后代。在这里,前同辈在含义上与前同辈轴相同。
如果 level="multiple",将构造当前节点的所有上级按文档顺序排序的列表,后接元素本身;然后从列表中选择与计数模式匹配的节点;再将列表中的每个节点映射到 1 加上该节点中与计数模式匹配的前同辈数。如果指定了 from 属性,搜索的上级必须是与 from 模式匹配的最近的上级的后代。在这里,前同辈在含义上与前同辈轴相同。
如果 level="any",将构造一个长度列表,包含与计数模式匹配的节点数,并且这些节点所属的节点集应包含当前节点以及按文档顺序在当前节点之前的任何文档级别的所有节点,任何命名空间和属性节点除外(即前轴和上级或自身轴的成员的联合)。如果指定了 from 属性,则只考虑第一个节点之后、当前节点之前的与 from 模式匹配的节点。
支持以下语言/编号架构。"“格式标记”对应于 format 属性,“语言”对应于 lang 属性,“字母值”对应于 letter-value 属性。
说明 |
格式标记 |
Language |
字母值 |
---|---|---|---|
西方语言 |
0x0031 (1) |
无 |
无 |
大写字母 |
0x0041 (A) |
无 |
无 |
小写字母 |
0x0061 (a) |
无 |
无 |
大写罗马字母 |
0x0049 (I) |
无 |
无 |
小写罗马字母 |
0x0069 (i) |
无 |
无 |
大写俄语(西里尔语) |
0x0410 |
无 |
无 |
小写俄语(西里尔语) |
0x0430 |
无 |
无 |
希伯来语字母 |
0x05d0 |
无 |
Alphabetic |
传统希伯来语 |
0x05d0 |
无 |
Traditional |
阿拉伯语 |
0x0623 |
无 |
无 |
印地语辅音字母 |
0x0905 |
无 |
无 |
印地语元音字母 |
0x0915 |
无 |
无 |
印地语数字 |
0x0967 |
无 |
无 |
泰语字母 |
0x0e01 |
无 |
无 |
泰语数字 |
0x0e51 |
无 |
无 |
日语 Aiueo(双字节) |
0x30a2 |
无 |
无 |
日语 Iroha(双字节) |
0x30a4 |
无 |
无 |
朝鲜语 Chosung |
0x3131 |
无 |
无 |
台湾方言小数 |
0x4e01 |
“zh-tw” |
无 |
朝鲜语小数 |
0x4e01 |
“ko” |
无 |
亚洲小数 |
0x4e01 |
任何其他语言 |
无 |
亚洲日本文字 |
0x58f1 |
无 |
无 |
繁体台湾方言 |
0x58f9 |
“zh-tw” |
无 |
繁体中文 |
0x58f9 |
任何其他语言 |
无 |
中文“Zodiac”12 |
0x5b50 |
无 |
无 |
中文“Zodiac”10 |
0x7532 |
无 |
无 |
中文“Zodiac”60 |
0x7532、0x5b50 |
无 |
无 |
朝鲜语 Ganada |
0xac00 |
无 |
无 |
朝鲜语小数 |
0xc77c |
无 |
无 |
朝鲜语 99 |
0xd558 |
无 |
无 |
西方语言(双字节) |
0xff11 |
无 |
无 |
日语 Aiueo(单字节) |
0xff71 |
无 |
无 |
日语 Iroha(单字节) |
0xff72 |
无 |
无 |
如果单独使用格式标记不足以消除特定编号架构的歧义,不需要指定语言或字母值。
下面是转换规范的一些示例。
format="ア" 指定 Katakana 编号。
format="イ" 指定按“iroha”顺序的 Katakana 编号。
format="๑" 指定使用泰语数字编号。
format="א" letter-value="traditional" 指定传统希伯来语编号。
format="ა" letter-value="traditional" 指定格鲁吉亚语编号。
format="α" letter-value="traditional" 指定经典希腊语编号。
format="а" letter-value="traditional" 指定旧斯拉夫语编号。
示例
该示例通过在排序列表中使用西方语言编号,然后使用小写罗马编号对项进行编号,演示 <xsl:number> 元素的使用方法。
XML 文件 (items.xml)
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="numelem.xsl" ?>
<items>
<item>Car</item>
<item>Pen</item>
<item>LP Record</item>
<item>Wisdom</item>
<item>Cell phone</item>
<item>Film projector</item>
<item>Hole</item>
<item>Canopy</item>
<item>Widget</item>
<item>Concept</item>
<item>Null character</item>
</items>
XSLT 文件 (numelem.xsl)
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="items">
<xsl:for-each select="item">
<xsl:sort select="."/>
<xsl:number value="position()" format="1. "/>
<xsl:value-of select="."/>,
<xsl:number value="position()" format="i) "/>
<xsl:value-of select="."/>
<br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
输出
以下是格式化输出:
1.Canopy, i) Canopy 2.Car, ii) Car 3.Cell phone, iii) Cell phone 4.Concept, iv) Concept 5.Film projector, v) Film projector 6.Hole, vi) Hole 7.LP Record, vii) LP Record 8.Null character, viii) Null character 9.Pen, ix) Pen 10.Widget, x) Widget 11.Wisdom, xi) Wisdom
以下是处理器输出:
<?xml version="1.0" encoding="UTF-16"?>1.Canopy,
i) Canopy<br />2.Car,
ii) Car<br />3.Cell phone,
...
xi) Wisdom<br />