fn:总和错误"无法转换为xs:double"

时间:2015-05-31 23:15:04

标签: xpath casting sum xquery

我试图添加多个节点(名称和节点数量不确定)。

执行查询

for $x in //onboard/*
return $x

返回此(及更多)

<total>
    <one/>
</total>
<total>
  <one>124</one>
  <two>1</two>
  <three>0</three>
</total>
<total>
  <one>46</one>
</total>
<total>
  <one>129</one>
  <two>1</two>
  <three>0</three>
</total>
<seafarers>
  <one>149</one>
  <two>3</two>
  <three>3</three>
  <six>155</six>
</seafarers>
<soldiers>
  <one>135</one>
  <six>118</six>
</soldiers>

每个孩子的名字是&#39;总计&#39;或者海员&#39;或类似但不固定的东西我想从节点&#39;一个&#39;返回所有节点的值的总和。到节点&#39;六&#39; 同样,不确定有多少节点以及是否存在任何节点(对于每个节点,至少存在一个数字节点,但这不一定是&#39;一个&#39;)。

到目前为止,我所尝试的所有内容都会导致类型错误或错误答案。

对于提供的示例代码,所需答案为:

125
46
130
310
253

1 个答案:

答案 0 :(得分:3)

您可以尝试这种方式:

for $x in //onboard/*[*]
return sum($x/*)

其中显示:对于$x<onboard>的每个孩子至少有一个子元素,返回$x所有子元素的总和。

更新:

原来这个问题是由于传递给sum()函数的空元素造成的。这是避免错误的另一种可能方法:

for $x in //onboard/*[normalize-space()]
return sum($x/*[normalize-space()])

以上xquery仅考虑{em}非空元素的<onboard>子项。然后在sum()操作中,再次只考虑$x的非空子项。