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

请求修改XSLT实现NetPay类型Amount全文件汇总并置首行

解决方案:汇总XML中"Net Pay"的Amount值并添加首行输出

核心逻辑

因为所有记录的PayDate一致,无需复杂分组,直接用XPath的sum()函数筛选出所有Desc为"Net Pay"的Record节点,对其Amount字段求和即可。


示例XML

<PayrollData>
  <Record>
    <PayDate>2024-05-31</PayDate>
    <Desc>Net Pay</Desc>
    <Amount>1500.00</Amount>
  </Record>
  <Record>
    <PayDate>2024-05-31</PayDate>
    <Desc>Net Pay</Desc>
    <Amount>2200.00</Amount>
  </Record>
  <Record>
    <PayDate>2024-05-31</PayDate>
    <Desc>Bonus</Desc>
    <Amount>500.00</Amount>
  </Record>
</PayrollData>

修改后的XSLT(新增首行汇总)

假设现有XSLT为表格输出格式,修改后代码如下:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>

  <xsl:template match="/">
    <html>
      <body>
        <table border="1">
          <!-- 新增首行:Net Pay汇总 -->
          <tr>
            <td colspan="3">Total Net Pay: <xsl:value-of select="sum(//Record[Desc='Net Pay']/Amount)"/></td>
          </tr>
          <!-- 原有输出逻辑 -->
          <tr>
            <th>PayDate</th>
            <th>Desc</th>
            <th>Amount</th>
          </tr>
          <xsl:for-each select="//Record">
            <tr>
              <td><xsl:value-of select="PayDate"/></td>
              <td><xsl:value-of select="Desc"/></td>
              <td><xsl:value-of select="Amount"/></td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

期望输出样例

<html>
  <body>
    <table border="1">
      <tr>
        <td colspan="3">Total Net Pay: 3700.00</td>
      </tr>
      <tr>
        <th>PayDate</th>
        <th>Desc</th>
        <th>Amount</th>
      </tr>
      <tr>
        <td>2024-05-31</td>
        <td>Net Pay</td>
        <td>1500.00</td>
      </tr>
      <tr>
        <td>2024-05-31</td>
        <td>Net Pay</td>
        <td>2200.00</td>
      </tr>
      <tr>
        <td>2024-05-31</td>
        <td>Bonus</td>
        <td>500.00</td>
      </tr>
    </table>
  </body>
</html>

关于分组失败的说明

你尝试按PayDate分组未成功,本质是因为所有记录的PayDate完全相同,分组后只会得到一个组,反而多此一举。直接使用全局的sum()函数筛选目标节点,是最简洁高效的实现方式。

内容的提问来源于stack exchange,提问作者Greg Gregerson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:12:44