我有下面的XSLT并且需要更新,以便如果值为< 0用特定字符替换最后一位数字。替换最后一个字符允许供应商告诉该值是否定的。例如,如果金额是000000-111155(-1111.55),我将需要它返回000000011115%。如果是正数,我需要它返回0000000111155。
我目前的XSLT如下:
<xsl:call-template name="prepend-pad">
<xsl:with-param name="length" select="13"/>
<xsl:with-param name="padType" select="'Zero'"/>
<xsl:with-param name="padVar">
<xsl:value-of
select="format-number(wd:Employee_CPP_QPP_Contribution*100,'#')"/>
</xsl:with-param>
</xsl:call-template>
我需要替换format-number语句,不知道如何操作。任何帮助是极大的赞赏。 必须更改最后一个字符以指示金额为负数。
0 = ' '
1 = '!'
2 = '"'
3 = '#'
4 = '$'
5 = '%'
6 = '&'
7 = "'"
8 = '('
9 = ')'
答案 0 :(得分:2)
假设给定整数 $num
,您可以使用以下内容:
<xsl:variable name="abs" select="translate($num, '-', '')" />
<xsl:value-of select="format-number($abs, '0000000000000')"/>
<xsl:if test="$num < 0">
<xsl:variable name="replace"> !"#$%&'()</xsl:variable>
<xsl:value-of select="translate($abs mod 10, '0123456789', $replace)"/>
</xsl:if>
当$ num为负数时,填充$ num的绝对值,并追加一个额外的字符。
要替换最后一位数而不是追加,请使用:
<xsl:choose>
<xsl:when test="$num >= 0">
<xsl:value-of select="format-number($num, '0000000000000')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="format-number(floor(-$num div 10), '000000000000')"/>
<xsl:variable name="replace"> !"#$%&'()</xsl:variable>
<xsl:value-of select="translate(-$num mod 10, '0123456789', $replace)"/>
</xsl:otherwise>
</xsl:choose>