xslt 2.0格式 - 重复模式与备用组分隔符

时间:2018-02-13 16:05:49

标签: xml xslt xslt-2.0 saxon

当我尝试向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

有没有办法可以绕过这种模式重复,所以它会逐字地评估我的模板?

1 个答案:

答案 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