2017-01-10 16 views
0

これは私の2番目の投稿であり、私があなたを助けてくれることを願っています。私は同様の疑問点を見つけましたが、わずかに異なっていたか、解決策を私の問題に移すことができませんでした。私は<groupedItem>の1つのインスタンスを生成する別個のグループ識別値に基づいてXQuery:同じグループ化基準を持つ要素に基づいて要素と計算をグループ化する

<?xml version="1.0" encoding="UTF-8"?> 
<goods> 
    <item> 
     <groupIdentification>001</groupIdentification> 
     <measures> 
      <measure type="piece"> 
       <value>100</value> 
       <unit>PK</unit> 
      </measure> 
      <measure type="weight"> 
       <value>100</value> 
       <unit>KG</unit> 
      </measure> 
     </measures> 
    </item> 
    <item> 
     <groupIdentification>002</groupIdentification> 
     <measures> 
      <measure type="piece"> 
       <value>200</value> 
       <unit>PK</unit> 
      </measure> 
      <measure type="weight"> 
       <value>200</value> 
       <unit>KG</unit> 
      </measure> 
     </measures> 
    </item> 
    <item> 
     <groupIdentification>001</groupIdentification> 
     <measures> 
      <measure type="piece"> 
       <value>300</value> 
       <unit>PK</unit> 
      </measure> 
      <measure type="weight"> 
       <value>300</value> 
       <unit>KG</unit> 
      </measure> 
     </measures> 
    </item> 
</goods> 

Iは、以下のソースを持っています。 <groupedItem>の中で<groupIdentification>を参照したいが、同じ値のIDを共有する別の値または他の値を合計したい。私はそれゆえ達成したい

ターゲット構造は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?> 
<goods> 
    <groupedItem> 
     <groupIdentification>001</groupIdentification> 
     <measures> 
      <measure type="piece"> 
       <value>400</value> 
       <unit>PK</unit> 
      </measure> 
      <measure type="weight"> 
       <value>400</value> 
       <unit>KG</unit> 
      </measure> 
     </measures> 
    </groupedItem> 
    <groupedItem> 
     <groupIdentification>002</groupIdentification> 
     <measures> 
      <measure type="piece"> 
       <value>200</value> 
       <unit>PK</unit> 
      </measure> 
      <measure type="weight"> 
       <value>200</value> 
       <unit>KG</unit> 
      </measure> 
     </measures> 
    </groupedItem> 
</goods> 

私はこれを達成する方法を説明するために私を助けてください、何のメカニズムがあります。同じ「グループ化要素」を共有するものを合計するようクエリに指示するのはやや難しいです。

ありがとうございます。

EDIT

私は次のクエリを使用している場合は、私が唯一の2 groupedItemsを得るが、私は低いレベルで継続できません。

xquery version "3.0"; 
<goods> 
{ 
for $item in goods/item 
let $group := $item/groupIdentification 
group by $group 
return 
<groupedItem> 
    { 
    for $groupIdentification in goods/item/groupIdentification 
    (: this is where I fail to get the connection :) 
    return 
    <groupIdentification>{ data($groupIdentification) }</groupIdentification> 
    } 
    (: no need for measure here yet, first need to solve the problem itself :) 
</groupedItem> 
} 
</goods> 

私が取得:

<?xml version="1.0" encoding="UTF-8"?> 
<goods> 
<groupedItem> 
    <groupIdentification>001</groupIdentification><groupIdentification>002</groupIdentification><groupIdentification>001</groupIdentification> 
</groupedItem> 
<groupedItem> 
    <groupIdentification>001</groupIdentification><groupIdentification>002</groupIdentification><groupIdentification>001</groupIdentification> 
</groupedItem> 
</goods> 
+0

XQueryはバージョン3.0/3.1になりました。これには 'group'節がありますので、これを試してみましたか? XQueryコードを表示してください。 –

+0

'group by'です;); https://www.w3.org/TR/xquery-30/#id-group-by – joewiz

+0

これまでの回答に感謝します。私のさらなる説明を見てください。グループ分けはより高いレベルで機能しますが、それに応じて下位レベルの処理を続ける方法はわかりません。 – PatrickSchenker

答えて

1

...しかし、私は、より低いレベルであなたがグループに2つ目の時間が必要

を続けて失敗します。 @typeに加えてunitにグループ化することもできます。

例...

(第2のユニットを導入するように修飾された)XML入力

<goods> 
    <item> 
     <groupIdentification>001</groupIdentification> 
     <measures> 
      <measure type="piece"> 
       <value>100</value> 
       <unit>PK</unit> 
      </measure> 
      <measure type="weight"> 
       <value>220</value> 
       <unit>LB</unit> 
      </measure> 
      <measure type="weight"> 
       <value>100</value> 
       <unit>KG</unit> 
      </measure> 
     </measures> 
    </item> 
    <item> 
     <groupIdentification>002</groupIdentification> 
     <measures> 
      <measure type="piece"> 
       <value>200</value> 
       <unit>PK</unit> 
      </measure> 
      <measure type="weight"> 
       <value>200</value> 
       <unit>KG</unit> 
      </measure> 
     </measures> 
    </item> 
    <item> 
     <groupIdentification>001</groupIdentification> 
     <measures> 
      <measure type="piece"> 
       <value>300</value> 
       <unit>PK</unit> 
      </measure> 
      <measure type="weight"> 
       <value>300</value> 
       <unit>KG</unit> 
      </measure> 
      <measure type="weight"> 
       <value>661</value> 
       <unit>LB</unit> 
      </measure> 
     </measures> 
    </item> 
</goods> 

のXQuery 3.0

xquery version "3.0"; 
<goods>{ 
for $item in /goods/item 
let $key := $item/groupIdentification 
group by $key 
order by $key 
return 
<groupedItem> 
    <groupIdentification>{$key}</groupIdentification> 
    <measures>{ 
    for $measure in $item/measures/measure 
    let $type := $measure/@type 
    let $unit := $measure/unit 
    group by $type,$unit 
    order by $type,$unit 
    return 
     <measure type="{$type}">{ 
     <value>{sum($measure/value)}</value>, 
     <unit>{$unit}</unit> 
     }</measure> 
    }</measures> 
</groupedItem> 
}</goods> 

出力

<goods> 
    <groupedItem> 
     <groupIdentification>001</groupIdentification> 
     <measures> 
     <measure type="piece"> 
      <value>400</value> 
      <unit>PK</unit> 
     </measure> 
     <measure type="weight"> 
      <value>400</value> 
      <unit>KG</unit> 
     </measure> 
     <measure type="weight"> 
      <value>881</value> 
      <unit>LB</unit> 
     </measure> 
     </measures> 
    </groupedItem> 
    <groupedItem> 
     <groupIdentification>002</groupIdentification> 
     <measures> 
     <measure type="piece"> 
      <value>200</value> 
      <unit>PK</unit> 
     </measure> 
     <measure type="weight"> 
      <value>200</value> 
      <unit>KG</unit> 
     </measure> 
     </measures> 
    </groupedItem> 
</goods> 
関連する問題