2

私は XQuery を初めて使用するので、最初のいくつかの問題を正しく実行したことを確認し、フィードバックがあるかどうかを確認したかっただけです。

価格が 100 未満のプリンター要素を検索します。

let $products := doc("products.xml")
for $e in $products/Products/Maker/Printer
where $e/Price < 100
return $e

同じことを行いますが、タグで囲まれたこれらの要素のシーケンスを生成します。

let $products := doc("products.xml")
for $e in $products/Products/Maker/Printer
where $e/Price < 100
return <CheapPrinters>$e</CheapPrinters>

Products.xml

<Products>
<Maker name = "A">
  <PC model = "1001" price = "2114">
    <Speed>2.66</Speed> 
    <RAM>1024</RAM> 
    <HardDisk>250</HardDisk>
  </PC>
  <PC model = "1002" price = "995">
     <Speed>2.10</Speed>
     <RAM>512</RAM>
     <HardDisk>250</HardDisk>
  </PC>
  <Laptop model = "2004" price = "1150">
     <Speed>2.00</Speed>
     <RAM>512</RAM>
     <HardDisk>60</HardDisk>
     <Screen>13.3</Screen>
  </Laptop>
  <Laptop model = "2005" price = "2500">
     <Speed>2.16</Speed>
     <RAM>1024</RAM>
     <HardDisk>120</HardDisk>
     <Screen>17.0</Screen>
  </Laptop>
</Maker>
<Maker name = "E">
  <PC model = "1011" price = "959">
 <Speed>1.86</Speed>    
 <RAM>2048</RAM>    
 <HardDisk>160</HardDisk>   
  </PC> 
  <PC model = "1012" price = "649">
 <Speed>2.80</Speed>    
 <RAM>1024</RAM>    
 <HardDisk>160</HardDisk>   
  </PC> 
  <Laptop model = "2001" price = "3673">
 <Speed>2.00</Speed>
 <RAM>2048</RAM>    
 <HardDisk>240</HardDisk>   
 <Screen>20.1</Screen>  
  </Laptop> 
  <Printer model = "3002" price =   "239">
     <Color>false</Color>
     <Type>laser</Type> 
  </Printer>
</Maker>    
<Maker name = "H">  
  <Printer model = "3006" price = "100">
     <Color>true</Color>
     <Type>ink-jet</Type>   
  </Printer>    
  <Printer model = "3007" price = "200">
     <Color>true</Color>
     <Type>laser</Type>
  </Printer>
 </Maker>
 </Products>
4

1 に答える 1

1

結果のフィルタリング

価格が 100 未満のプリンター要素を検索します。

100 ドルより安いプリンターはありません。例では 200 を使用しました。:)

属性ではなく、要素を照会しています。@属性名の前に を追加します。また、XQuery では大文字と小文字が区別されるため、次を使用する必要があります@price

let $products := doc("products.xml")
for $e in $products/Products/Maker/Printer
where $e/@price < 200
return $e

はるかに短い XPath に相当するもの (XQuery のサブセット) を試すこともできます。

doc("products.xml")/Products/Maker/Printer[@price<200]

エレメント構造

同じことを行いますが、タグで囲まれたこれらの要素のシーケンスを生成します。

ここで、「実際の」XQuery を使用する必要があります。あなたの例は(上記で修正されたエラーを除いて)ほとんど問題ありませんが、現在、各行に「$ e」を返します。要素を作成するには 2 つの方法があります。こちらの便利なチュートリアルもご覧ください。

  1. 中括弧

    return <CheapPrinters>{$e}</CheapPrinters>

  2. 要素コンストラクター

    return element {"CheapPrinters"} {$e}

于 2012-06-01T17:27:44.417 に答える