在XSLT中,数字的格式化输出常常依赖xsl:decimal-format元素来定义十进制格式。该元素用于声明一个数字格式模板,之后可通过format-number函数按照指定样式输出数值,特别适用于报表、发票等需要固定数字显示规则的场景。

一、xsl:decimal-format基本用法
xsl:decimal-format是一个顶层元素,通常放在stylesheet直接子级。它主要通过属性来描述数字的各个符号与占位规则。最基础的声明方式如下:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:decimal-format name="cn"
decimal-separator="."
grouping-separator=","/>
<xsl:template match="/">
<xsl:value-of select="format-number(1234567.89, '#,##0.00', 'cn')"/>
</xsl:template>
</xsl:stylesheet>
上述代码定义了一个名为cn的十进制格式,小数点为句点,千分位为逗号,并将数字格式化为带两位小数的千分位形式。
二、常用属性说明
除了decimal-separator与grouping-separator,xsl:decimal-format还包含多个控制字符与模式的属性:
| 属性名 | 作用 | 默认值 |
|---|---|---|
| name | 格式名称,供format-number引用 | 无(匿名默认) |
| decimal-separator | 小数点字符 | . |
| grouping-separator | 分组分隔符 | , |
| infinity | 无穷大的表示 | Infinity |
| NaN | 非数字的表示 | NaN |
| digit | 模式中的数字占位符 | # |
| pattern-separator | 正负模式分隔符 | ; |
三、在format-number中引用格式
定义好十进制格式后,使用format-number(value, pattern, format-name)即可应用。下面的例子演示了如何输出欧元风格的数字:
<xsl:decimal-format name="eu"
decimal-separator=","
grouping-separator="."/>
<xsl:template match="/">
<p>
<xsl:value-of select="format-number(98765.432, '#.##0,00', 'eu')"/>
</p>
</xsl:template>
这里小数点变成了逗号,千分位是句号,输出结果为98.765,43。
四、注意事项
- 同一个样式表中可定义多个具名decimal-format,互不冲突。
- 若未指定name,则作为默认格式被无第三参数的format-number使用。
- pattern中的占位符需与digit等属性保持一致,否则会报错。
- 特殊字符如&在XML中需写作&,避免解析错误。
合理运用xsl:decimal-format,可以让XSLT在不同语言环境下稳定输出预期的数字格式。
XSLTdecimal-formatXML转换修改时间:2026-07-28 14:30:24