Xquery 1.0 - 查询以获取某些元素的平均值,并将该平均值放回到同一位置

时间:2016-04-06 07:12:22

标签: xpath xquery

所以我有一个像这样的XML文件:

<data>
    <person name="john" lastname="doe" >
        <grades>
            <math>90</math>
            <biology>23</biology>
        </grades>
    </person>
    .
    .

我知道如何查询这个以获得所有成绩的平均值,但我想取平均值并将其放在与原始xml文件的成绩完全相同的位置,替换成绩。所以我会有类似的东西:

<data>
    <person name="john" lastname="doe" >
        <average>56.5</average> 
    </person>
    .
    .

编辑:我实际上找到了一种在内部获得所需结果的方法,感谢对此问题的建议,但它可能在将来帮助我。

1 个答案:

答案 0 :(得分:2)

正如评论中所提到的,XQuery无法从字面上返回修改后的XML。您将不得不重新创建XML,并且考虑到要开始的复杂XML文档,这会变得过于复杂。

对于这个相当简单的XML结构,您可以使用以下XQuery返回预期的XML:

<data>
{
    for $p in /data/person
    let $g := $p/grades/*
    return 
        <person>
        {
            $p/@*,
            <average>{sum($g) div count($g)}</average>
        }
        </person>
}
</data>

<强> xpathtester demo