5

アイテムが販売されていないタイプの製品を提供するクエリを考え出す必要があります。つまり、アイテムのタイプが衣料品であり、トランザクションのリストに衣料品が表示されない場合、それを表示する必要があります。

これは私の XML ファイルです (超カナダ的で申し訳ありません)。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE store [

<!ELEMENT store (product*, transaction*)> 
<!ATTLIST store name CDATA #REQUIRED > 

<!ELEMENT product EMPTY> 
    <!ATTLIST product 
        name ID #REQUIRED 
        type CDATA #REQUIRED 
        price CDATA #REQUIRED 
    > 

    <!ELEMENT transaction EMPTY> 
    <!ATTLIST transaction 
products IDREFS #REQUIRED 
sumPrice CDATA #REQUIRED 
    >

]>
<store name="Gordons">
<product name="beaverCoat" type="clothing" price="100"/>
<product name="hockeyStick" type="equipment" price="30"/>
<product name="hockeyPuck" type="equipment" price="5"/>
<product name="icePick" type="equipment" price="40"/>
<product name="mooseMeat" type="food" price="350"/>
<product name="salmon" type="food" price="15"/>
<transaction products="hockeyPuck hockeyStick" sumPrice="35"/>
<transaction products="hockeyStick mooseMeat" sumPrice="380"/>
<transaction products="salmon mooseMeat" sumPrice="365"/>
<transaction products="hockeyStick hockeyStick hockeyStick" sumPrice="30"/>
</store>

望ましい出力

<product name="beaverCoat" type="clothing"/> 何も購入していないカテゴリ(衣料品)の商品だからです。つまり、衣料品を含む取引はありません。

私の試みいくつかのクエリをいじっ てみましたが、うまくいきません。これは私が得た最も近いものです:

//product[@type != //transactions/@products/@type]

これはうまくいくようです - すべての のいずれとも等しくないすべての製品を見つけますが、type多くのエラーが発生しています。typetransactions

誰かが少し説明して解決策を提供できれば、本当に感謝しています。

4

1 に答える 1

5

この関数を使用して、要素の属性のノード セットで使用し、販売されたid()すべてのアイテムのノード セットを取得できます。productstransaction

id(//transaction/@products)

それを簡単に拡張して、type販売されたアイテムを取得できます。

id(//transaction/@products)/@type

type必要なのは、 がこのセットに含まれていないすべての製品です。これは次のように与えられます。

//product[not(@type = id(//transaction/@products)/@type)] 

サンプル XML でこれを使用すると、beaverCoat製品ノードのみが選択されます。

于 2014-01-16T15:12:53.293 に答える