Xquery将项目分组,其中项目彼此相关

时间:2010-11-25 10:03:09

标签: xml xquery

我正在使用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> 

谢谢你。

1 个答案:

答案 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>