2017-06-16 17 views
2

構造体に同じ値の要素がありますが、要素によって値が変更されます。 情報をグループ化して出力をマウントする必要があります。xquery distinct-valuesとgroup by xquery 1.0を選択してください。

私は2出力

<results> 
     <result> 
      <idResult>2</idResult> 
      <nome>abc</nome> 
      <links> 
       <url>example7</url> 
       <url>example5</url> 
       <url>example3</url> 
      </links> 
     </result> 
     <result> 
      <idResult>5</idResult> 
      <nome>xpto</nome> 
      <links> 
       <url>example1</url> 
      </links> 
     </result> 
    <results> 

を返すために必要

<root> 
     <cadastro> 
      <id>2</id> 
      <nome>abcd</nome> 
      <links> 
       <link>example7</link> 
      </links> 
     </cadastro> 
     <cadastro> 
      <id>2</id> 
      <nome>abc</nome> 
      <links> 
       <link>example5</link> 
       <link>example3</link> 
      </links> 
     </cadastro> 
     <cadastro> 
      <id>5</id> 
      <nome>xpto</nome> 
      <links> 
       <link>example1</link> 
      </links> 
     </cadastro> 
    </root> 

Iは異なる値を使用しようとしたが、私は、ペイロードに同じIDに貴様値を有します。 xquery 1.0でどのようにグループ化できますか?

+0

あなたが求めているものについて、もう少し明確だろうか?別の '要素のみを選択するxqueryサンプルを要求していますか?'あなたの望みの出力を表示してもよかったです。これまでに何を試しましたか? – Zimano

+0

Zimanoに感謝しましたが、wstは私のトラブルについて質問しました。 –

+0

:-)答えがあなたのニーズに合っていればそれを受け入れてください! – Zimano

答えて

0

distinct-valuesを使用して一意のIDを反復処理し、そのIDを持つすべての一致する要素を照会することができます。

ただし、2と一致する要素の値が<nome>の値が異なり、そのうちの1つのみが返されます。しかしどちらが正しいのかははっきりしていないので、このソリューションは両方を出力します。一致が1つしか必要ない場合は、制約を追加する必要があります。これは簡単に($id-results/nome)[1]とすることもできますが、必要なものを選択する保証はありません。

element results { 
    let $ids := $data/cadastro/id 
    for $id in distinct-values($ids) 
    let $id-results := $data/cadastro[id = $id] 
    return element result { 
    element idResult { $id }, 
    $id-results/nome, 
    element links { 
     $id-results/links/link 
    } 
    } 

=>

<results> 
    <result> 
    <idResult>2</idResult> 
    <nome>abcd</nome> 
    <nome>abc</nome> 
    <links> 
     <link>example7</link> 
     <link>example5</link> 
     <link>example3</link> 
    </links> 
    </result> 
    <result> 
    <idResult>5</idResult> 
    <nome>xpto</nome> 
    <links> 
     <link>example1</link> 
    </links> 
    </result> 
</results> 
+0

ありがとうございました。 –

+0

@AlexSilvaこれがあなたの質問に答えた場合は、この回答の横にある緑色のチェックをクリックして、それを合格とマークしてください。 – wst

関連する問題