Xslt 1.0格式节点然后求和

时间:2015-07-31 13:33:23

标签: xslt

如何格式化节点然后对这些节点求和?

我正在使用sum函数然后格式化。

<xsl:value-of select="format-number(sum(/Item/Total),'&#163;#.00')"/>

但是当我尝试做的时候

<xsl:value-of select="sum(format-number(/Item/Total,'&#163;#.00'))"/>

它给我一个错误,说总和不能像那样应用。

这用于通过C#

生成报告

1 个答案:

答案 0 :(得分:1)

  

我需要在总结之前对这些节点进行舍入

在XSLT 1.0中,您必须分两步完成此操作。给出:

<强> XML

<root>
    <item id="1">
        <amount>1.996</amount>
    </item>
    <item id="2">
        <amount>2.495</amount>
    </item>
    <item id="3">
        <amount>10</amount>
    </item>
</root>

XSLT 1.0

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/root">
    <!-- first pass -->
    <xsl:variable name="rounded-amounts">
        <xsl:for-each select="item">
            <amt>
                <xsl:value-of select="round(amount * 100) div 100" />
            </amt>
        </xsl:for-each>
    </xsl:variable>
    <!-- final pass -->
    <output>
        <xsl:value-of select="sum(exsl:node-set($rounded-amounts)/amt)" />
    </output>
</xsl:template>

</xsl:stylesheet>

<强>结果

<?xml version="1.0" encoding="UTF-8"?>
<output>14.5</output>