Xquery嵌套层次结构

时间:2017-02-05 16:18:56

标签: xml xquery flwor

我试图查询XML文件

<?xml version="1.0" encoding="UTF-8"?>
<family>
    <person salary="1000">
        <name>Maria Fischer</name>
        <person salary="750">
            <name>Helmut Fischer</name>
            <person salary="830">
                <name>Maria Helbing</name>
                <person salary="0">
                    <name>David Helbing</name>
                </person>
            </person>
         </person>
    </person>
</family>

这是人员的层次结构,其中XML文档中的父/子关系表示家庭中的父/子关系。我想使用XQUERY查询整个家庭的工资总额。我知道我必须使用嵌套的FLWOR return和fn:sum。我试过了

 for $p in doc("family.xml")/family
 return 
    for $p in $p/person
    return $p

我相信这可以提取XML中的所有节点。但我仍然不知道如何提取工资属性并总结它们。我对XQUERY很新,还没有看到有关stackflow的相关问题。 XQuery Nested For Loop似乎有关系,但我仍然无法弄明白。请帮忙!

3 个答案:

答案 0 :(得分:3)

你们过于复杂了。它只是

sum(//@salary)

答案 1 :(得分:2)

只能使用xpath完成:

//family/sum(.//person/@salary)

(在http://xpather.com/WVyWJ27N上测试)

使用FLWR,您可以非常类似地执行此操作(如已建议的那样):http://xpather.com/lUYxzXfC

答案 2 :(得分:0)

使用选择器的嵌套FLWR表达式使用child:: - 轴来下降树永远不会处理数据中的任意递归。除非您的family元素具有固定或最大深度,否则您不需要嵌套的FLWR表达式(至少不是因为这个原因)。

尝试递归函数。或者只是

的内容
for $f in doc('family.xml')/family
return sum($f/descendant::person/@salary)

(未经测试)。