XSLT 2.0 如何更改数字的默认格式?

Posted

技术标签:

【中文标题】XSLT 2.0 如何更改数字的默认格式?【英文标题】:XSLT 2.0 How to change default formatting for numbers? 【发布时间】:2010-07-29 16:16:02 【问题描述】:

在 XSLT 1.0(使用 Xalan)中,输出结果:

<xsl:variable name="source0" select="number(num3)"/>
<xsl:value-of select="$source0"/>

这个数字拼写为 2011234。但在 XSLT 2.0(使用 Saxon)中,它显示为 2.011234E6。我希望它在 Saxon/2.0 案例中始终显示为 2011234。

有没有办法在输出数字时设置默认图片字符串?

我看到了十进制格式,但这只会影响图片字符串,它不会设置数字格式。从那以后,我不能到处乱扔格式号,我必须到处检查数据类型,而且……这会是一团糟。

【问题讨论】:

除非你想要浮点数,否则不要使用浮点数。养成声明变量类型的习惯(例如 as="xs:integer"),并使用显式转换(xs:decimal()、xs:integer())而不是 number() 函数。 【参考方案1】:

没有办法在 XSLT 2.0(或 XSLT 1.0)中表示每次输出数字值时,它必须采用“默认”格式,而不使用 fn:format-number()xsl:decimal-formatop:cast 或内置-in 类型构造函数。将每个数字考虑为某种特定类型的唯一方法是为输入声明了一个模式(因此它是一个 PSVI),并且您使用模式感知处理器运行转换。

【讨论】:

感谢您的回答...哇,这看起来很疯狂。显然,有一个默认转换,那么为什么不可以调整该默认转换呢?真讨厌。所以它需要格式编号出现在所有地方……现在我发现格式编号有严重的问题……但这是一个不同的问题…… @taotree:我认为声明一个“默认”数字格式将是一个特性,但我认为它不像一流函数、项目模式匹配或以嵌套序列为例。 其实没关系。数字格式支持很少,默认格式切换为 7 位数的科学格式......支持功能不足以使可设置的默认格式无论如何都有意义。

以上是关于XSLT 2.0 如何更改数字的默认格式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xslt 2.0 中将字符串解析为日期

如何在 xslt-1.0 中获取绝对值

XSLT 2.0 中的日期时间格式

当输入文件上的字段为空时,XSLT 2.0 如何跳过写入元素

XSLT 2.0 如何对每个唯一项目 id 的计数求和

如何使用 XSLT 2.0 将 csv 文件转换为结构化 XML 文件?