2010-11-18 9 views
3

私はこのXMLを持っている:xqueryの属性に基づいて要素をグループ化する方法は?

<all> 
    <a> 
     <b x="i" al="kl"/> 
     <b x="j" al="ml"/> 
     <b x="k" al="jl"/> 
     <b x="j" al="pl"/> 
     <b x="j" al="il"/> 
     <b x="i" al="dl"/> 
    </a> 
    <a> 
     <b x="i1" al="kl"/> 
     <b x="j2" al="ml"/> 
     <b x="k3" al="jl"/> 
     <b x="j2" al="pl"/> 
     <b x="j2" al="il"/> 
     <b x="i3" al="dl"/> 
    </a> 
</all> 

私が本当にやりたいことは、私は@xでグループ要素bに必要な各Aのためです。

<a x="j"> 
<b x="j" l="ml"/> 
<b x="j" l="pl"/> 
... 
</a> 
<a x="i"> 
    <b x="i" al="kl"/> 
    <b x="i" al="dl"/> 
</a> 
... 
... 
... 

答えて

4

このXQueryの:

element result { 
    for $a in /all/a 
    return for $x in ($a/b/@x)[index-of($a/b/@x,.)[1]] 
      return element a { 
        $x, 
        $a/b[@x eq $x] 
       } 
} 

出力:だから、結果は次のようになりますあなたのプロセッサは、XQuery 1.1をサポートしている場合

<result> 
    <a x="i"> 
     <b x="i" al="kl"/> 
     <b x="i" al="dl"/> 
    </a> 
    <a x="j"> 
     <b x="j" al="ml"/> 
     <b x="j" al="pl"/> 
     <b x="j" al="il"/> 
    </a> 
    <a x="k"> 
     <b x="k" al="jl"/> 
    </a> 
    <a x="i1"> 
     <b x="i1" al="kl"/> 
    </a> 
    <a x="j2"> 
     <b x="j2" al="ml"/> 
     <b x="j2" al="pl"/> 
     <b x="j2" al="il"/> 
    </a> 
    <a x="k3"> 
     <b x="k3" al="jl"/> 
    </a> 
    <a x="i3"> 
     <b x="i3" al="dl"/> 
    </a> 
</result> 
+0

このコードを実行してください。 –

+0

作業例、Alejandroありがとう。間違いなく、答えてください。 – user3111525

+0

@ user322034:あなたはウェルカムです。 –

1

を、あなたは単にgroup byを使用することができます。

let $all := 
    <all> 
    <a> 
     <b x="i" al="kl"/> 
     <b x="j" al="ml"/> 
     <b x="k" al="jl"/> 
     <b x="j" al="pl"/> 
     <b x="j" al="il"/> 
     <b x="i" al="dl"/> 
    </a> 
    <a> 
     <b x="i1" al="kl"/> 
     <b x="j2" al="ml"/> 
     <b x="k3" al="jl"/> 
     <b x="j2" al="pl"/> 
     <b x="j2" al="il"/> 
     <b x="i3" al="dl"/> 
    </a> 
    </all> 
for $a in $all/a 
for $b in $a/b 
let $x := string($b/@x) 
group by $x 
order by $x 
return 
    <a x="{$x}"> 
    {$b} 
    </a> 

http://try.zorba-xquery.com/

+0

+1オンラインXQueryテストリンクの場合。 –

+0

私はSaxonを使用しています。現在、Saxonは、単一のfor節、単一のlet節、および単一のgroup-by節を持つためのグループ式を必要としています。とにかく答えてくれてありがとう。 +1。 – user3111525

関連する問題