2010-11-25 20 views
0

私はeXist Xqueryを使用しています。私はこの問題に悩まされています。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> 

感謝します。

答えて

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> 
+0

いいえ、+1。 –

関連する問題