You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:46:24