我正在研究一个更大的XQuery,并且在如何获取我需要的数据方面一片空白。我正在努力寻找一个人正在进行的项目的所有工具。
XML:
<?xml version="1.0" encoding="UTF-8"?>
<projects>
<project pid="p123">
<leader>
<name>Amanda</name>
</leader>
<analyst>
<name>Bob</name>
</analyst>
</project>
<project pid="p456">
<leader>
<name>John</name>
</leader>
</project>
<project pid="p789">
<leader>
<name>David</name>
</leader>
<analyst>
<name>Amanda</name>
</analyst>
</project>
</projects>
结果,不是这种格式,Amanda与p123,p789,Bob与p123,John与p456,David与p789。我本周刚刚开始使用XQuery,所以我还不熟悉这种语言。感谢
编辑: 我试图获得的表格是
<workforce>
<emp roles, name>
<project>
<proj>(Project ids go here)</proj>
</project>
</emp>
<workforce>
我可以把它变成这种形式但是我无法获得的部分。我需要将员工与当前的项目联系起来。
答案 0 :(得分:0)
正如其他人已经指出的那样,最好发布您尝试过的内容,以便我们查看并修复错误。但是,对于一个简单的查询,这里有可能解决您的问题:
let $in :=
<projects>
<project pid="p123">
<leader>
<name>Amanda</name>
</leader>
<analyst>
<name>Bob</name>
</analyst>
</project>
<project pid="p456">
<leader>
<name>John</name>
</leader>
</project>
<project pid="p789">
<leader>
<name>David</name>
</leader>
<analyst>
<name>Amanda</name>
</analyst>
</project>
</projects>
for $n in distinct-values($in/project/*/name)
return
<person name="{ $n }"> {
for $p in $in/project[*/name = $n]
return
<project pid="{ $p/@pid }" position="{ name($p/*[name eq $n]) }"/>
}
</person>
这不完全是你所描述的输出,但我无法理解它。评估上述表达式会产生以下结果:
<person name="Amanda">
<project pid="p123" position="leader"/>
<project pid="p789" position="analyst"/>
</person>
<person name="Bob">
<project pid="p123" position="analyst"/>
</person>
<person name="John">
<project pid="p456" position="leader"/>
</person>
<person name="David">
<project pid="p789" position="leader"/>
</person>
也就是说,对于每个不同的名称,创建一个person
元素,并为名称显示的每个项目创建一个project
元素及其PID和当前名称的位置。