如何对格式为 #,###.## 的数字进行求和

3

大家好,

在xsl:stylesheet version="1.0"中,有没有可能对格式为1,185.00的数字进行求和?例如:

<document>
 <number>1,185.00</number>
 <number>2,000.11</number>
</document>

结果应该是:

<document>
 <sum>3185.11</sum>
<document>
1个回答

2
你可以在检索数据时使用translateformat-number,以便在显示数据时进行处理。
我想的是这样的:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/">
        <document>
            <xsl:apply-templates select="document/number[1]">
                <xsl:with-param name="val" select="0"/>
            </xsl:apply-templates>
        </document>
    </xsl:template>

    <xsl:template match="number">
        <xsl:param name="val"/>
        <xsl:choose>
            <xsl:when test="not(following::number)">
                <sum>
                    <xsl:value-of select="format-number($val + translate(./text(),',',''), '###.##')"/>
                </sum>
            </xsl:when>
            <xsl:otherwise>
                <xsl:apply-templates select="following::number">
                    <xsl:with-param name="val" select="$val + translate(./text(),',','')"/>
                </xsl:apply-templates>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

对于您的输入,它会生成以下输出:

<?xml version='1.0' encoding='UTF-8' ?>
<document>
    <sum>3185.11</sum>
</document>

1
@rakaszeru:没错,但要记住隐式转换:这个$val + number(translate(./text(),',',''))与这个$val + translate(.,',','')是一样的。 - user357812
谢谢,我会更新我的答案使其更加高效(我刚刚先检查一下)。 - rekaszeru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接