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