for $i in $a return $i/p1 + $i/p2 + $i/p3当我期望显示总和时,为什么我在这里得到无效的词汇值?">
let $a := <product>
<p1>100</p1>
<p2>100</p2>
<p3/>
</product>
for $i in $a
return $i/p1 + $i/p2 + $i/p3
当我期望显示总和时,为什么我在这里得到无效的词汇值?
发布于 2013-06-17 13:02:02
最后一行return $i/p1 + $i/p2 + $i/p3
的计算结果为return xs:double($i/p1) + xs:double($i/p2) + xs:double($i/p3)
。这适用于p1
和p2
,但不适用于p3
xs:double($i/p3) = xs:double(<p3/>)
= xs:double(xs:untypedAtomic('')) (: atomization :)
= xs:double('')
由于如果+
的其中一个参数是空序列,则它将返回空序列()
,因此您的方法在任何一种情况下都不起作用。您可以改用fn:sum($sequence)
,对元素内的文本节点求和:
let $a :=
<product>
<p1>100</p1>
<p2>100</p2>
<p3/>
</product>
for $i in $a
return sum(($i/p1/text(), $i/p2/text(), $i/p3/text()))
最后一行甚至可以缩短为:
return sum($i/(p1, p2, p3)/text())
https://stackoverflow.com/questions/17147149
复制相似问题