跳转到主内容
极星编程网:以代码为星,赴技术山海!

XPath的sum()函数怎么计算节点集数值之和

XPath的sum()函数对节点集各节点字符串值转数字后求和,无法转换的节点通常被视作0;语法为sum(node-set),需注意XPath 1.0仅支持节点集、不支持字符串序列。 XPath 的 sum() 函数用于对节点集( node -set)中每个节点的字符串值转为数字后求和,只适用于能成功转为数值的节点;无法转换的节点(如纯文本“abc”)会被当作 0 处理。 sum() 的基本用法 语法: sum(node-set) ,其中 node-set 是一个节点集合(比如多个元素、属性或文本节点)。函数会依次取每个节点的字符串值(
string()
),再尝试转成数字(
number()
),最后加总。 如果节点是元素,取其**合并后的文本内容**(即所有后代文本节点拼接,去首尾空格) 如果节点是属性(如
@price
),直接取其属性值字符串 空字符串、非数字字符串(如 "hello")转为数字后是 NaN ,而 XPath 1.0 中
sum()
遇到 NaN 会返回 NaN;但实际多数解析器(如 libxml2、Java XPath API)会把无法转换的项视作 0 —— 行为取决于 处理器 实现,建议提前过滤或确保数据干净 常见使用场景示例 假设有如下 XML: Comet AI 浏览器 下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。 下载
10 25.5 abc
sum(/products/item/price)
→ 结果通常是 35.5 (前两个有效,"abc" 和空格被当作 0)
sum(/products/item/price[number(.) = number(.)])
→ 加个安全过滤:只对能成功转数字的 price 求和(XPath 1.0 中常用技巧,利用
number("abc")
是 NaN,而
NaN = NaN
为 false)
sum(/products/item/@discount)
→ 对所有 item 元素的 discount 属性值求和(需属性存在且为数字格式) 注意事项与避坑点 XPath 1.0 不支持
sum()
直接作用于字符串序列(如
sum(("1","2","3"))
),必须是节点集;XPath 2.0+ 才支持序列,但多数 浏览器 和老系统仍用 1.0 节点为空或仅含空白字符(如
)时,
string()
返回空字符串,
number("")
是 0 如果想跳过非法值并只加合法数字,推荐先用
number()
判断:例如
sum(/products/item/price[number(.) > 0])
(注意这会漏掉负数和零) 基本上就这些。用好 sum() 关键是理解它隐式调用 string() 和 number(),并结合数据质量做前置校验或过滤。

相关文章