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

XPath 2.0中如何计算各节点计算值的总和?

问题

现有如下XML结构,已实现单个Part节点的两种计算:Cost*Qty 或 round((DirectPrice*Qty div 12)*100) div 100(保留两位小数的取整计算)。需求是仅使用XPath 2.0(不能用XSLT函数),将所有Part节点的该计算值求和,并把结果放在文档底部。

示例XML:

<AddPart_Container displayName="Add Sensor(s)" displayValue="Add Sensor(s)">
    <Part displayName="Part (Sensor 02)" displayValue="Part (Sensor 02)">
        <PartCategory>Hardware</PartCategory>
        <PartName>Wireless Enterprise Vibration Sensor V3 (1 MP per)</PartName>
        <PartNumber>PR55-61E</PartNumber>
        <Cost>366.95</Cost>
        <DirectPrice>492.95</DirectPrice>
        <Qty>200</Qty>
    </Part>
    <Part displayName="Part (Sensor 04)" displayValue="Part (Sensor 04)">
        <PartCategory>Hardware</PartCategory>
        <PartName>Wireless 3 Channel Current Sensor - 0 to 100 (3 MP per)</PartName>
        <PartNumber>PR55-26C</PartNumber>
        <Cost>337.94</Cost>
        <DirectPrice>492.95</DirectPrice>
        <Qty>10</Qty>
    </Part>
</AddPart_Container>

单节点计算代码:

<# <Content Select="round((./DirectPrice * ./Qty div 12) * 100) div 100"/> #>

解决方案

XPath 2.0的sum()函数支持对节点序列的计算结果求和,直接把单个节点的计算逻辑嵌套进sum()即可,无需依赖XSLT扩展函数。

1. 基于Cost*Qty的求和表达式

sum(/AddPart_Container/Part/(Cost * Qty))

2. 基于DirectPrice*Qty/12取整后的求和表达式

sum(/AddPart_Container/Part/(round((DirectPrice * Qty div 12) * 100) div 100))

将结果置于文档底部

如果环境支持XPath插入节点,可通过以下表达式在文档末尾添加包含求和结果的节点:

insert node <Total>{sum(/AddPart_Container/Part/(round((DirectPrice * Qty div 12) * 100) div 100))}</Total> into /AddPart_Container[last()]

该表达式会在AddPart_Container的末尾插入一个Total节点,节点内容即为所有Part的计算值总和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:35:11