1

我试图查询一个 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似乎相关,但我仍然无法弄清楚。请帮忙!

4

3 回答 3

3

你们都把事情复杂化了。简直了

sum(//@salary)
于 2017-02-06T08:50:34.563 回答
2

只能使用 xpath 来完成:

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

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

使用 FLWR,您可以非常相似地做到这一点(如前所述):http: //xpather.com/lUYxzXfC

于 2017-02-05T20:29:49.817 回答
0

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

尝试递归函数。或者只是类似的东西

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

(未测试)。

于 2017-02-05T18:22:53.700 回答