如何使用XPath计算XML节点中ttc与ht两个属性的差值
XPath计算ttc与ht属性差值的实现方法
你提供的XML示例如下:
<books> <book> <price ht="100" ttc="120"/> </book> <book> <price ht="150" ttc="180"/> </book> </books>
实现方案
核心逻辑是先将属性值转换为数值类型再做减法,避免字符串类型导致的运算异常,根据你使用的XPath版本不同,对应两种实现方式:
方案1:XPath 2.0及以上版本(支持批量运算)
绝大多数主流XPath解析器都支持该版本,用以下表达式可以直接返回所有book/price节点的差值序列:
//book/price/(number(@ttc) - number(@ht))
针对你的示例,执行后返回结果为 20, 30。
如果需要输出带标识的结果,可以用字符串拼接函数:
//book/price/concat('差值:', number(@ttc) - number(@ht))
返回结果为 差值:20, 差值:30。
方案2:XPath 1.0版本(仅支持单节点运算)
XPath 1.0不支持批量节点运算,需要按节点索引逐个计算:
- 第一个price节点差值:
number(//book/price[1]/@ttc) - number(//book/price[1]/@ht)→ 返回20 - 第二个price节点差值:
number(//book/price[2]/@ttc) - number(//book/price[2]/@ht)→ 返回30
补充说明:如果你的解析器默认会自动将属性转换为数值类型,可以省略
number()函数,加上该函数可以提升兼容性,避免大部分类型报错问题。
内容的提问来源于stack exchange,提问作者coutier eric
相关产品推荐
相关产品推荐

