1
let $a := <product>
<p1>100</p1>
<p2>100</p2>
<p3/>
</product>
for $i in $a 
return $i/p1 + $i/p2 + $i/p3

合計が表示されるはずなのに、ここで無効な字句値を取得するのはなぜですか?

4

1 に答える 1

2

最後の行return $i/p1 + $i/p2 + $i/p3は として評価されreturn xs:double($i/p1) + xs:double($i/p2) + xs:double($i/p3)ます。これはp1p2では機能しますが、 では機能しませんp3:

  xs:double($i/p3) = xs:double(<p3/>)
                   = xs:double(xs:untypedAtomic(''))  (: atomization :)
                   = xs:double('')

+引数の 1 つが空のシーケンスである場合、空のシーケンスを返すため、どちら()の方法でも機能しませんでした。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())
于 2013-06-17T13:02:01.693 に答える