我想在XSLT中格式化一个带有前导零的4位数字。
E.g。
1234 -> 1234
12 -> 0012
1 -> 0001
0 -> 0000
因此我使用函数format-number
如下:
format-number(somevalue, '0000')
除了0作为 somevalue 之外的所有内容都可以正常工作。在这里我得到0而不是0000。
答案 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, ' = ')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(format-number(somevalue, '0000'), ' = ')"/>
</xsl:otherwise>
</xsl:choose>
数字(0)变为0而不是(0)为真。因此0是格式化的。
我更改了Peter在帖子中推荐的数字检查,现在它完全正常。