我正在使用eXist Xquery。我坚持这个问题。
我有一个20 xml的集合,其内容如下所示:
1.123.15.200.xml
<element name="userID">P111</element>
<element name="folderUID">A1</element>
<element name="imageUID">IMG15234</element>
1.123.15.205.xml
<element name="userID">P115</element>
<element name="folderUID">A34</element>
<element name="imageUID">IMG15238</element>
等...
用户可以拥有多个文件夹,文件夹可以包含多个图像。 1 xml等于1个图像数据。
for $x in distinct-values(collection('db/mapdb')//element[@name="userID"])
return
<group>
{
// This part is where I have issue, i have no idea what to write in within this portion?
}
</group>
输出:
<group>
<user>P111</user>
<folder id="A1">
<image>IMG15238</image>
<image>IMG16234</image>
<image>IMG23523</image>
</folder>
<folder id="A82">
<image>IMG132238</image>
<image>IMG42344</image>
<image>IMG242523</image>
</folder>
</group>
谢谢你。
答案 0 :(得分:3)
let $col := collection('db/mapdb')//*[element]
for $user in distinct-values($col/element[@name eq 'userID']),
return
<group>
<user>{$user}</user>
{
for $fold in distinct-values($col[element[@name eq 'userID'] eq $user]
/element[@name eq 'folderUID'])
return
<folder id="{$fold}">
{
for $img in $col[element[@name eq 'userID'] eq $user]
[element[@name eq 'folderUID'] eq $fold]
/element[@name eq 'imageUID']
return
<image>{string($img)}</image>
}
</folder>
}
</group>