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: