我试图查询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似乎有关系,但我仍然无法弄明白。请帮忙!
答案 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)
(未经测试)。