XSLT函数format_number对于带有前导零的格式的0不起作用

时间:2013-12-11 16:31:57

标签: xslt xslt-2.0

我想在XSLT中格式化一个带有前导零的4位数字。

E.g。

1234 -> 1234
12   -> 0012
1    -> 0001
0    -> 0000

因此我使用函数format-number如下:

format-number(somevalue, '0000')

除了0作为 somevalue 之外的所有内容都可以正常工作。在这里我得到0而不是0000。

2 个答案:

答案 0 :(得分:0)

我有一个代码段和一个模板来添加前导零。 也许它可以帮助你:

<IDTNR>
 <xsl:call-template name="checkAndConvertNumeric">
     <xsl:with-param name="numValue" select="somevalue"/>
     <xsl:with-param name="numFormat" select="'0000'"/>
   </xsl:call-template>
</IDTNR>

<xsl:template name="checkAndConvertNumeric">
    <xsl:param name="numValue" />
    <xsl:param name="numFormat" />
    <xsl:choose>
        <xsl:when test="normalize-space(number($numValue)) = 'NaN'">
            <xsl:value-of select="$numValue" />
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="string(format-number($numValue,$numFormat))" />
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

在第

<xsl:with-param name="numFormat" select="'0000'"/>

指定所需的零数。

尊重, 彼得

答案 1 :(得分:0)

我刚发现了这个问题。我的问题是对数字的错误检查,如下所示。

<xsl:choose>
    <xsl:when test="not(number(somevalue))">
        <xsl:value-of select="concat(somevalue, ' =&#160;')"/>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="concat(format-number(somevalue, '0000'), ' =&#160;')"/>
    </xsl:otherwise>
</xsl:choose>

数字(0)变为0而不是(0)为真。因此0是格式化的。

我更改了Peter在帖子中推荐的数字检查,现在它完全正常。