我试图添加多个节点(名称和节点数量不确定)。
执行查询
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
答案 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
的非空子项。