XML/XSL新手求助:如何添加节点计算同名节点的总和
解决XML/XSL中同名节点求和的问题
嘿,作为XML/XSL新手碰到这种求和需求太正常啦!你现在的代码只是取出了单个SAC05节点的值,要计算所有同名节点的总和,咱们得用上XSLT的sum()函数,这正是你需要的工具~
问题分析
你当前的代码片段:
<th align="left"><font size="2"><xsl:text>Total Freight & Other Charges: </xsl:text></font></th> <td><font size="2"> $<xsl:value-of select='format-number(Document-810/SUMMARY/SAC/SAC05, "###,###,##0.00")'/></font></td>
这里的Document-810/SUMMARY/SAC/SAC05只会匹配到第一个符合路径的SAC05节点,没办法把所有同层级的SAC节点下的SAC05数值加起来。
修改方案
只需要把select里的节点路径用sum()函数包裹起来,就能实现所有目标节点的求和:
<th align="left"><font size="2"><xsl:text>Total Freight & Other Charges: </xsl:text></font></th> <td><font size="2"> $<xsl:value-of select='format-number(sum(Document-810/SUMMARY/SAC/SAC05), "###,###,##0.00")'/></font></td>
额外提示(可选)
如果有些SAC05节点可能是空值或者非数值内容,为了避免求和出错,可以加上过滤条件,只对有效数值求和:
<xsl:value-of select='format-number(sum(Document-810/SUMMARY/SAC/SAC05[number(.) != NaN]), "###,###,##0.00")'/>
或者更简单地过滤掉非正数(根据你的业务场景调整):
<xsl:value-of select='format-number(sum(Document-810/SUMMARY/SAC/SAC05[number(.) > 0]), "###,###,##0.00")'/>
这样就能轻松实现你要的表单总计功能啦!
内容的提问来源于stack exchange,提问作者Hank
相关产品推荐
相关产品推荐

