Xquery 如何避免;无效的词法值“;在添加空节点时 let$a:= 100 100 一美元换一美元 返回$i/p1+$i/p2+$i/p3

Xquery 如何避免;无效的词法值“;在添加空节点时 let$a:= 100 100 一美元换一美元 返回$i/p1+$i/p2+$i/p3,xquery,Xquery,当我希望显示总和时,为什么在这里得到无效的词法值?您的最后一行return$i/p1+$i/p2+$i/p3的计算结果为return xs:double($i/p1)+xs:double($i/p2)+xs:double($i/p3)。这适用于p1和p2,但不适用于p3: let $a := <product> <p1>100</p1> <p2>100</p2> <p3/> </product> for $i i

当我希望显示总和时,为什么在这里得到无效的词法值?

您的最后一行
return$i/p1+$i/p2+$i/p3
的计算结果为
return xs:double($i/p1)+xs:double($i/p2)+xs:double($i/p3)
。这适用于
p1
p2
,但不适用于
p3

let $a := <product>
<p1>100</p1>
<p2>100</p2>
<p3/>
</product>
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 sum(($i/p1/text(), $i/p2/text(), $i/p3/text()))

谢谢,这确实帮助我理解了其中的差异
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())