【问题标题】:xslt 2.0 format-number repeating pattern with alternate group-separator带有备用组分隔符的 xslt 2.0 格式编号重复模式
【发布时间】:2018-02-13 16:05:49
【问题描述】:

当我尝试为format-number 函数提供备用grouping-separator 时,我试图理解为什么XSLT 2.0 会重复以下模式:

 <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

有没有一种方法可以绕过这种模式重复,以便从字面上评估我的掩码?

【问题讨论】:

    标签: xml xslt xslt-2.0 saxon


    【解决方案1】:

    您使用的是撒克逊语吗?使用 Saxon 9.8,我的行为与您相同。

    规范在 2.0 和 3.0 之间重新表述。在 2.0 中它说:

    此外,如果这些整数部分分组位置在规则 间隔(也就是说,如果它们形成一个序列 N,2N,3N,... 整数值 N,包括其中只有一个数的情况 列表),则该序列包含 N 的所有整数倍 尽可能容纳尽可能多的人数。

    虽然 3.0 说了以下(第三条规则是新的):

    如果满足以下条件,则将分组定义为常规分组 申请:

    • 子图整数部分至少有一个grouping-separator。

    • 有一个正整数G(分组大小)使得每个分组分隔符在整数部分的位置 子图是G的正整数倍。

    • 子图整数部分中G的正整数倍的每个位置都被一个分组分隔符占据。

    如果分组是规则的,那么 integer-part-grouping-positions 序列包含所有整数 尽可能多的 G 的倍数,以容纳最大可能 号码。

    所以您的分组在 2.0 定义下是常规的,但在 3.0 定义下不是。 Saxon 显然正在实施 2.0 定义。我怀疑此更改旨在修复错误,而 Saxon 似乎尚未实施此更改。

    作为一种解决方法,您可以将图片定义为

    #-###############################################-##
    

    额外的分组分隔符放置在左侧太远,以至于您永远不会有这么大的数字。

    (在这里提出了撒克逊问题:https://saxonica.plan.io/issues/3669

    【讨论】:

    • 很好的解释@MichaelKay,我正在使用Saxon 9.5。感谢您打开问题单。我会留意的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 2019-03-10
    • 2019-07-22
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 2010-10-05
    相关资源
    最近更新 更多