XSLT - 查看最后一位数字并用符号替换

时间:2014-05-19 20:37:54

标签: xml regex xslt

我有下面的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 = ')'

1 个答案:

答案 0 :(得分:2)

假设给定整数 $num,您可以使用以下内容:

<xsl:variable name="abs" select="translate($num, '-', '')" />
<xsl:value-of select="format-number($abs, '0000000000000')"/>
<xsl:if test="$num &lt; 0">
    <xsl:variable name="replace"> !"#$%&amp;'()</xsl:variable>
    <xsl:value-of select="translate($abs mod 10, '0123456789', $replace)"/>
</xsl:if>
当$ num为负数时,

填充$ num的绝对值,并追加一个额外的字符。


修改

替换最后一位数而不是追加,请使用:

<xsl:choose>
    <xsl:when test="$num &gt;= 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"> !"#$%&amp;'()</xsl:variable>
        <xsl:value-of select="translate(-$num mod 10, '0123456789', $replace)"/>
    </xsl:otherwise>
</xsl:choose>