当我尝试向XSLT 2.0
函数提供备用grouping-separator
时,我试图理解为什么format-number
重复以下模式:
<xsl:decimal-format grouping-separator="-" name="hyphenFormatting"/>
<xsl:template match="/">
<xsl:value-of select="format-number(642120, '####-##', 'hyphenFormatting')"/>
</xsl:template>
输出:64-21-20
当我预期输出为:6421-20
有没有办法可以绕过这种模式重复,所以它会逐字地评估我的模板?
答案 0 :(得分:1)
你在使用撒克逊人吗?使用Saxon 9.8,我会得到与你相同的行为。
规范在2.0和3.0之间进行了重新定义。在2.0中它说:
此外,如果这些整数部分分组位置是常规的 间隔(即,如果它们形成序列N,2N,3N,......对于某些区间 整数值N,包括只有一个数字的情况 列表),然后序列包含N的所有整数倍 尽可能容纳尽可能多的数量。
虽然3.0说以下(第三条规则是新的):
如果满足以下条件,则分组定义为常规分组 适用:
子图片的整数部分至少有一个分组分隔符。
有一个正整数G(分组大小),使得每个分组分隔符的位置在整数部分中 子图片是G的正整数倍。
子图片整数部分中G的正整数倍中的每个位置都被分组分隔符占用。
如果分组是常规的,则整数部分分组位置序列包含所有整数 G的倍数,以尽可能容纳最大值 号。
因此,您的分组在2.0定义下是常规的,但不在3.0定义下。 Saxon显然正在实施2.0定义。我怀疑这个改变是作为一个bug修复,看起来撒克逊没有实现这个改变。
作为解决方法,您可以将图片定义为
#-###############################################-##
将额外的分组分隔符放置到左边,你将永远不会有这么大的数字。
(在这里提出撒克逊问题:https://saxonica.plan.io/issues/3669)