1

カタログの 3 番目と 4 番目の製品の詳細を印刷しようとしましたが、空の結果が得られます。

XML 入力:

<catalog>
  <product dept="WMN">
    <number>557</number>
    <name language="en">Fleece Pullover</name>
    <colorChoices>navy black</colorChoices>
  </product>
  <product dept="ACC">
    <number>563</number>
    <name language="en">Floppy Sun Hat</name>
  </product>
  <product dept="ACC">
    <number>443</number>
    <name language="en">Deluxe Travel Bag</name>
  </product>
  <product dept="MEN">
    <number>784</number>
    <name language="en">Cotton Dress Shirt</name>
    <colorChoices>white gray</colorChoices>
    <desc>Our <i>favorite</i> shirt!</desc>
  </product>
</catalog>

私が試したこと:

SELECT xDoc.query('  for $prod in //product
let $x:=$prod
return (<Item>{data($x[3])}{data($x[4])}</Item>)') 
FROM  AdminDocs
where  id=6

表示される出力:

<Item />
<Item />
<Item />
<Item />
4

1 に答える 1

3

これにより、すべての製品に対するループが定義されます。

for $prod in //product

これらの製品ごとに、単一の製品のシーケンスから 3 番目と 4 番目のノードを返します。これにより、明らかに空のノードが生成されます。

let $x:=$prod
return (<Item>{data($x[3])}{data($x[4])}</Item>)

理解を深めるために、毎回製品ノード全体を返します。

for $prod in //product
return <item>{ $prod }</item>

次のような結果になります。

<item>
  <product dept="WMN">
    <number>557</number>
    <name language="en">Fleece Pullover</name>
    <colorChoices>navy black</colorChoices>
  </product>
</item>
<item>
  <product dept="ACC">
    <number>563</number>
    <name language="en">Floppy Sun Hat</name>
  </product>
</item>
<item>
  <product dept="ACC">
    <number>443</number>
    <name language="en">Deluxe Travel Bag</name>
  </product>
</item>
<item>
  <product dept="MEN">
    <number>784</number>
    <name language="en">Cotton Dress Shirt</name>
    <colorChoices>white gray</colorChoices>
    <desc>Our <i>favorite</i> shirt!</desc>
  </product>
</item>

そして、これらの各<product/>要素は$prod[1]. 試す:

for $prod in //product
return <item>{ $prod[1] }</item>

と比較して、まったく同じ結果が返されます

for $prod in //product
return <item>{ $prod[2] }</item>

(またはその他の位置述語) 空の<item/>ノードになります。

for最後に、3 番目と 4 番目の積のみを返すには、位置述語をループ引数にシフトします。

for $prod in //product[position() = 3 or position() = 4]
return <item>{ $prod }</item>

(必要に応じて適用data(...)しますが、ここで期待する結果は得られないと思います)。

于 2015-10-07T15:11:09.760 に答える