XSL总和未显示正确的值



我需要总和下面的xml字段的值,其中最终值应为335。

<charges>
    <fees>25</fees>
    <service>
        <servtypes>Service 1</servtypes>
        <servamt>150</servamt>
    </service>
    <service>
        <servtypes>Service 2</sertypes>
        <servamt>10</servamt>
    </service>
    <service>
        <servtypes>Service 3</servtypes>
        <servamt>150</servamt>
    </service>
<charges>

这是我用来显示数据的一部分XSL代码。问题是,如果我包含应该总结所有servamt的总和函数,则它给我带来了NAN值。您如何修复它?另外,我该如何在所有servamt的总和上添加费用?

<fo:table-row>
<fo:table-cell display-align="center">
<fo:block>Fees</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block><xsl:value-of select="fees"/></fo:block>
</fo:table-cell>
<fo:table-cell display-align="center">
<fo:block><fo:leader/></fo:block>
</fo:table-cell>
</fo:table-row>
<xsl:for-each select="service">
<fo:table-row>
<fo:table-cell display-align="center">
<fo:block><xsl:value-of select="servtypes"/></fo:block>
</fo:table-cell>
<fo:table-cell >
**<fo:block><xsl:value-of select="sum((charges/fees | service/servamt))"/>**</fo:block>
</fo:table-cell>
<fo:table-cell display-align="center">
<fo:block><fo:leader/></fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>

在模板规则中与 feesservice元素匹配的父元素,调用

sum((fees | service/servamt))

如果您的XML如下(如您的XML所示,看起来均缺失了根元素):

<root>
    <fees>25</fees>
    <service>
        <sertypes>Service 1</sertypes>
        <servamt>150</servamt>
    </service>
    <service>
        <sertypes>Service 2</sertypes>
        <servamt>10</servamt>
    </service>
    <service>
        <sertypes>Service 3</sertypes>
        <servamt>150</servamt>
    </service>
</root>

然后,您的代码将与XSL中的以下计算一起使用:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:template match="/">
            <fo:table-row>
                <fo:table-cell display-align="center">
                    <fo:block>Fees</fo:block>
                </fo:table-cell>
                <fo:table-cell>
                    <fo:block>
                        <xsl:value-of select="/root/fees"/>
                    </fo:block>
                </fo:table-cell>
                <fo:table-cell display-align="center">
                    <fo:block>
                        <fo:leader/>
                    </fo:block>
                </fo:table-cell>
            </fo:table-row>
            <xsl:for-each select="/root/service">
                <fo:table-row>
                    <fo:table-cell display-align="center">
                        <fo:block>
                            <xsl:value-of select="sertypes"/>
                        </fo:block>
                    </fo:table-cell>
                    <fo:table-cell >
                        <fo:block>
                            <xsl:value-of select="sum(//servamt) + /root/fees"/>
                        </fo:block>
                    </fo:table-cell>
                    <fo:table-cell display-align="center">
                        <fo:block>
                            <fo:leader/>
                        </fo:block>
                    </fo:table-cell>
                </fo:table-row>
            </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

结果是:

<?xml version="1.0" encoding="UTF-8"?>
<fo:table-row xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:table-cell display-align="center">
        <fo:block>Fees</fo:block>
    </fo:table-cell>
    <fo:table-cell>
        <fo:block>25</fo:block>
    </fo:table-cell>
    <fo:table-cell display-align="center">
        <fo:block>
            <fo:leader/>
        </fo:block>
    </fo:table-cell>
</fo:table-row>
<fo:table-row xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:table-cell display-align="center">
        <fo:block>Service 1</fo:block>
    </fo:table-cell>
    <fo:table-cell>
        <fo:block>335</fo:block>
    </fo:table-cell>
    <fo:table-cell display-align="center">
        <fo:block>
            <fo:leader/>
        </fo:block>
    </fo:table-cell>
</fo:table-row>
<fo:table-row xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:table-cell display-align="center">
        <fo:block>Service 2</fo:block>
    </fo:table-cell>
    <fo:table-cell>
        <fo:block>335</fo:block>
    </fo:table-cell>
    <fo:table-cell display-align="center">
        <fo:block>
            <fo:leader/>
        </fo:block>
    </fo:table-cell>
</fo:table-row>
<fo:table-row xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:table-cell display-align="center">
        <fo:block>Service 3</fo:block>
    </fo:table-cell>
    <fo:table-cell>
        <fo:block>335</fo:block>
    </fo:table-cell>
    <fo:table-cell display-align="center">
        <fo:block>
            <fo:leader/>
        </fo:block>
    </fo:table-cell>
</fo:table-row>

希望它会有所帮助。

最新更新