xpath的sum()函数用于计算节点集中所有数值的总和,它会将每个节点的字符串值尝试转换为数字并求和,若存在无法转换的值(如"n/a")则结果为nan,空字符串或空节点被视为0,空节点集返回0;可通过谓语过滤节点实现条件求和,如sum(//product[price > 100]/price)计算价格大于100的商品总价;当结果异常时,应检查节点集是否为空、是否存在非数值字符串或路径错误,通过验证内部xpath表达式返回的节点及其值可有效排查问题,最终确保输入数据纯净且路径准确即可得到正确结果。

XPath的
sum()
sum()
要使用
sum()
sum()
NaN
举几个例子:
假设我们有这样的XML片段:
<products>
  <product id="1">
    <name>Laptop</name>
    <price>1200.50</price>
    <quantity>5</quantity>
  </product>
  <product id="2">
    <name>Mouse</name>
    <price>25.00</price>
    <quantity>10</quantity>
  </product>
  <product id="3">
    <name>Keyboard</name>
    <price>75.99</price>
    <quantity>3</quantity>
  </product>
  <product id="4">
    <name>Monitor</name>
    <price>300</price>
    <quantity>7</quantity>
  </product>
  <product id="5">
    <name>Empty</name>
    <price>N/A</price>
    <quantity>0</quantity>
  </product>
</products>计算所有商品的总价格:
sum(//product/price)
这会找到所有
<price>
1200.50 + 25.00 + 75.99 + 300 + NaN = NaN
计算所有商品的库存总和:
sum(//product/quantity)
这会得到
5 + 10 + 3 + 7 + 0 = 25
计算特定属性值的总和: 如果你的数值是存储在属性里的,比如:
<items> <item value="10" /> <item value="20" /> </items>
你可以这样求和:
sum(//item/@value)
结果是
30
理解
sum()
这是个很常见的问题,也常常是导致
sum()
sum()
对于无法转换为数字的字符串: 如果一个节点的文本内容(或属性值)无法被解析为有效的数字(比如"N/A", "abc", "价格:100"),那么在尝试转换为数字时,它会被视为
NaN
NaN
NaN
NaN
sum()
NaN
对于空节点或空字符串: 如果一个节点存在,但其文本内容是空的(例如
<price></price>
<item value=""/>
0
对于空节点集: 如果你提供的节点集是空的,也就是说,XPath表达式没有匹配到任何节点,那么
sum()
0
NaN
所以,当你的
sum()
NaN
0
sum()
[]
sum()
例如,我们仍然使用上面的XML结构。
只计算价格大于100的商品总价:
sum(//product[price > 100]/price)
这里,
[price > 100]
<product>
<price>
sum()
<product>
<price>
1200.50 + 300 = 1500.50
price > 100
计算库存量大于5的商品的总数量:
sum(//product[quantity > 5]/quantity)
这会筛选出
quantity
quantity
10 + 7 = 17
结合多个条件进行求和: 比如,我们想计算所有名称不包含"Mouse"且价格低于100的商品的总库存:
sum(//product[not(contains(name, 'Mouse')) and price < 100]/quantity)
这里使用了
not()
contains()
and
not(contains(name, 'Mouse'))
price < 100
3
通过谓语,你可以构建出非常精细的筛选逻辑,确保
sum()
当
sum()
结果是NaN
"123.45元"
"未知"
"N/A"
normalize-space()
substring-before()
translate()
"¥123.45"
"¥"
sum(//price[number(.) = number(.)])
number(.) = number(.)
NaN
NaN
sum(//price[not(contains(., 'N/A'))])
结果是0
sum()
//product/price
"0"
""
0
结果是错误的数值(非NaN
0
<item>
<price>
//item
sum()
<item>
//item/price
//item/@value
总的来说,排查
sum()
sum()
sum()
以上就是XPath的sum()函数怎么计算数值总和?的详细内容,更多请关注php中文网其它相关文章!
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号