执行查询时出错

时间:2010-11-18 19:35:43

标签: xml xquery

<query1><abc>76</abc><abc>20</abc><abc>30</abc></query1>

我在执行xquery后获得此输出。我需要的是我想要计算数字-76 + 20 + 30。我希望总和作为输出。但它给了我上面的输出线作为输出。

我只是使用了“for”表达式然后返回结果。我如何得到结果。 我尝试在返回中使用sum {$ e},但它仍然会产生相同的输出。我需要这些数字的总和。

  for $r in (doc("yahoo.xml")/vid/number)
    return
    <abc>{$r}</abc>

我得到了上面的输出。我应该得到它的全部。

4 个答案:

答案 0 :(得分:0)

使用此输入(格式正确)

<query1>
    <abc>76</abc>
    <abc>20</abc>
    <abc>30</abc>
</query1>

即使这个XPath 1.0也能正常工作。

sum(/query1/abc)

你得到了你想要的东西:为每个number元素(作为$ r)返回一个abc元素,其中$ r作为孩子。实际上你的输出应该是这样的:

    <abc><number>76</number></abc>
    <abc><number>20</number></abc>
    <abc><number>30</number></abc>

您应该使用:

element abc {sum(doc("yahoo.xml")/vid/number)}

答案 1 :(得分:0)

很难从问题中分辨出来,所以我会猜测你的XML输入是什么样的,以及你想要输出的是什么。

XML输入

<?xml version="1.0" encoding="UTF-8"?>
<vid>
  <number>76</number>
  <number>20</number>
  <number>30</number>
</vid>

<强>的XQuery

for $r in (doc("yahoo.xml")/vid)
    let $total := sum($r/number)
    return
    <query1>
      <abc>{$total}</abc>
    </query1>

<强>输出

<?xml version="1.0" encoding="UTF-8"?>
<query1>
   <abc>126</abc>
</query1>

答案 2 :(得分:0)

这很简单。使用:

<abc>{sum(doc("yahoo.xml")/vid/number)}</abc>

答案 3 :(得分:0)

如果我按如下方式考虑xml,我们需要获取节点并添加它。

   let $query := <query1>
                    <abc>76</abc>
                    <abc>20</abc>
                    <abc>30</abc>
                  </query1>

    let $sum := for $r in ($query)
                let $total := sum($r/node())
                return <query1>
                        <abc>{$total}</abc>
                       </query1>
    return $sum