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

如何使用XPath对XML表格中的同名行进行聚合求和?

问题解答

首先,你提供的源XML存在标签闭合错误(部分<R1>未闭合、末尾空<Line>无效),先修正为合法的XML结构才能正常解析:

<Table Type="Main">
  <Line>
    <R1>
      <Name>Jane</Name>
      <Orders>12</Orders>
    </R1>
  </Line>
  <Line>
    <R1>
      <Name>Mark</Name>
      <Orders>7</Orders>
    </R1>
  </Line>
  <Line>
    <R1>
      <Name>Jane</Name>
      <Orders>11</Orders>
    </R1>
  </Line>
  <Line>
    <R1>
      <Name>Adam</Name>
      <Orders>17</Orders>
    </R1>
  </Line>
</Table>

仅用XPath能否实现聚合求和?

这取决于你使用的XPath版本:

1. XPath 1.0

无法直接实现。XPath 1.0没有内置分组、聚合函数,只能完成节点筛选,没法按Name分组并对Orders求和。必须借助宿主语言(如Python的lxml、Java DOM解析器)或XSLT 1.0配合实现。

2. XPath 2.0及以上(含3.0/3.1)

可以实现。XPath 2.0+支持distinct-values()、sum()及for表达式,能完成分组聚合:

  • 获取所有唯一Name值:

    distinct-values(/Table/Line/R1/Name)
    
  • 对每个唯一Name对应的Orders求和,生成结构化结果:

    for $name in distinct-values(/Table/Line/R1/Name)
    return 
      element Result {
        element Name { $name },
        element TotalOrders { sum(/Table/Line/R1[Name = $name]/Orders/xs:integer(.)) }
      }
    

该表达式会输出以下结构:

<Result>
  <Name>Jane</Name>
  <TotalOrders>23</TotalOrders>
</Result>
<Result>
  <Name>Mark</Name>
  <TotalOrders>7</TotalOrders>
</Result>
<Result>
  <Name>Adam</Name>
  <TotalOrders>17</TotalOrders>
</Result>

是否需要修改源表格?

不需要修改源表格的业务数据,但必须先修正XML的语法错误(标签闭合问题),否则任何XML解析工具都无法正常处理文档。

内容的提问来源于stack exchange,提问作者Tommy K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:20:11