2012-04-09 10 views
0

の複数の値を返すがありDEPタグ上でいくつかのタグであるかもしれないか、彼らが欠落していることがあります。XQueryは、xmlファイルを考えてみましょう代わりに、1

リストにサプライヤのリストを表示する必要があります。サプライヤのリストを表示する必要があります。

Supp2 
Item1, 2 
Supp1 
Item1, 2 
Item2, 1 

これは私のコードです:

<ul> 
{ 
for $sup in distinct-values(doc("warehouse.xml")//supplier) 
for $item in doc("warehouse.xml")//item[supplier = $sup] 

return <li>{data($sup)} <ul> { 
let $n:= $item/itemName 
let $y:= doc("warehouse.xml")//dep[//itemName=$n]/@no 
for $n1 in $n return <li>{data($n1), data($y)} </li>} </ul> </li> 
} 
</ul> 

私は2つの問題に直面しています。まず、yは1別から始まる、すべての部門番号を示すことであることは、私は1社の二つのアイテムを生産するサプライヤー、代わりの

Supp1 
Item1, 2 
Item2, 3 

を持っている場合、私はあなたができるものを提案してもらえ

Supp1 
Item1, 1,2, ... 
Supp1 
Item2, 1,2, ... 

を得るということです間違っている?私は深く感謝しています。

答えて

1

XQueryを初めて使用しているので、次のように書くことができます。

入力:

<warehouse> 
    <something/> 
    <dep no ="2"> 
    <item> 
     <itemName>Item1</itemName> 
     <supplier>Supp1</supplier> 
     <supplier>Supp2</supplier> 
    </item> 
    </dep> 
    <anything/> 
    <dep no ="1"> 
    <item> 
     <itemName>Item2</itemName> 
     <supplier>Supp1</supplier> 
     <supplier>Supp3</supplier> 
    </item> 
    </dep> 
    <whatever/> 
</warehouse> 

問合せ:

<ul>{ 
(: the ../text() can be dropped from everywhere :) 
let $doc := doc("input.xml")  
for $supplier in distinct-values($doc//supplier/text()) 
let $items := $doc//item[supplier/text() = $supplier]/itemName/text() 
return <li>{$supplier}: {string-join($items, ", ")}</li> 
}</ul> 

出力:

<ul> 
    <li>Supp1: Item1, Item2</li> 
    <li>Supp2: Item1</li> 
    <li>Supp3: Item2</li> 
</ul> 

クエリの背後にある理論は以下の通りです。

  • あなたは基本的に取引先によってグループにしたいすべてのサプライヤのための項目名を一覧表示したいので。

    $doc//item[supplier/text() = $supplier]/itemName/text() 
    

    あなたはすべてのアイテムをつかむ意味:あなたが指定したサプライヤーに関連したすべての項目を一覧表示します。この後

    distinct-values($doc//supplier/text()) 
    
  • :このためには、入力内のすべてのユニークなサプライヤーの存在を反復処理する必要がありますサプライヤ名が指定されたサプライヤの名前と等しい入力で、これらの(フィルタリングされた)アイテムの名前を取得するよりも優先されます。

これはそれでした。私はいくつかの意味を作ったといいですね!

+0

あなたの返信に深く感謝します。私は酸素を使用しています、そして、それは "グループで"定義されていないようです。 (http://www.w3schools.com/xpath/xpath_functions.asp)任意の提案ですか? –

+0

@PiotrL。ああ、それはXQuery 3.0で少しだけ特別に定義されています。あなたのXQueryプロセッサはそれをまだサポートしていないようです。私はこの機能を使用しないように私の答えを更新しました。 –

関連する問題