XPath不直接支持MAX/MIN聚合,但可用not()配合比较表达式实现:最大值用//price[not(. ../price)];XPath 2.0+支持max()/min()函数,更直观。
XPath 本身不直接支持“查找最大/最小值节点”这种聚合操作(比如 SQL 中的 MAX()),但可以通过比较运算和位置判断来实现——关键在于用 not() 和比较表达式构造“没有其他节点比它更大/更小”的逻辑。
假设 XML 中有多个 节点,你想选中值最大的那个:
//price[not(.
说明:这个表达式选出所有 price 节点中,**不存在另一个 price 节点的值比它大** 的节点。由于数值会被自动转换比较,它等价于“最大值节点”。如果多个节点值相同且都是最大,会返回全部。
常见写法还有:
max() 函数,更直观;但 XPath 1.0 不支持同理,找最小值节点用:
//price[not(. > ../price)]
意思是:该 price 的值,**不比任何同级 price 大** → 即它是最小的。
对应 XPath 2.0+ 写法:
XPath 默认按字符串比较,所以 "10" 为真(因为字符串比较看首字符)。要按数值比较,需确保节点内容可转为数字:
number() 强制转换://price[number(.) > number(../price)](配合 not() 使用)29.99 比 $29.99 更安全)number() 会返回 NaN,导致比较失败;可先用 string-length(normalize-space()) > 0 过滤XML 片段:
15 8 22
查最大价格节点://
price[not(. → 返回
查最小价格节点: