如何在for-each-group后添加含部门金额总和的尾随行
解决XSLT分组后添加部门金额汇总尾随行的问题
嘿,我来帮你搞定这个在for-each-group之后添加部门金额汇总行的问题!这在XSLT 2.0及以上版本里其实很容易实现,核心是利用分组后的current-group()函数来计算总和。
首先,先补全一下你的XML示例(假设每个Report_Entry包含金额字段,毕竟要算总和嘛):
<?xml version='1.0' encoding='UTF-8'?> <wd:Report_Data xmlns:wd="urn:com.workday.report/bsvc"> <wd:Report_Entry> <wd:Department>FISHING</wd:Department> <wd:Ledger_Account> <wd:Ledger_ID>99999999</wd:Ledger_ID> </wd:Ledger_Account> <wd:Amount>1500.00</wd:Amount> </wd:Report_Entry> <wd:Report_Entry> <wd:Department>FISHING</wd:Department> <wd:Ledger_Account> <wd:Ledger_ID>88888888</wd:Ledger_ID> </wd:Ledger_Account> <wd:Amount>2300.00</wd:Amount> </wd:Report_Entry> <wd:Report_Entry> <wd:Department>HUNTING</wd:Department> <wd:Ledger_Account> <wd:Ledger_ID>77777777</wd:Ledger_ID> </wd:Ledger_Account> <wd:Amount>3200.00</wd:Amount> </wd:Report_Entry> </wd:Report_Data>
接下来是实现需求的XSLT代码,我会给你标注关键部分:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="urn:com.workday.report/bsvc"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/wd:Report_Data"> <!-- 按部门分组 --> <xsl:for-each-group select="wd:Report_Entry" group-by="wd:Department"> <!-- 先输出当前部门的所有条目 --> <xsl:for-each select="current-group()"> <wd:Entry> <wd:Dept><xsl:value-of select="wd:Department"/></wd:Dept> <wd:LedgerID><xsl:value-of select="wd:Ledger_Account/wd:Ledger_ID"/></wd:LedgerID> <wd:Amt><xsl:value-of select="wd:Amount"/></wd:Amt> </wd:Entry> </xsl:for-each> <!-- 这里就是你要的部门汇总尾随行 --> <wd:Department_Total> <wd:Dept><xsl:value-of select="current-grouping-key()"/></wd:Dept> <wd:Total_Amount><xsl:value-of select="sum(current-group()/wd:Amount)"/></wd:Total_Amount> <wd:Note>部门总金额</wd:Note> </wd:Department_Total> </xsl:for-each-group> </xsl:template> </xsl:stylesheet>
关键知识点说明:
<xsl:for-each-group>的group-by="wd:Department"会把所有同部门的Report_Entry归为一组current-group()指代当前分组下的所有条目,用sum(current-group()/wd:Amount)就能直接计算该部门的总金额current-grouping-key()可以获取当前分组的键值(也就是部门名称),不用再重复读取字段
这样处理后,每个部门的所有条目输出完成后,就会紧跟一行该部门的金额汇总行啦!
内容的提问来源于stack exchange,提问作者Remo Hernandez
相关产品推荐
相关产品推荐

