我需要总和下面的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>
在模板规则中与 fees
和 service
元素匹配的父元素,调用
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>
希望它会有所帮助。