2016-05-31 9 views
0

IDとIDREFの一致する製品がコメントに値を持たない要素の書籍と雑誌のタイトルを抽出しようとしているXMLファイルがあります。一致する属性の子が空のXQuery find要素

だから私は持っているXMLファイルには、次のようなものになります。

<bookshop> 
    <product ID="185.3.16"> 
     <price currency="AU$">56.85</price> 
     <comments>Best sell</comments> 
    </product> 
    <product ID="163.24.12"> 
     <price currency="NZ$">28.6</price> 
     <comments /> 
    </product> 
    <product ID="332.17.25"> 
     <price currency="US$">19.95</price> 
     <comments></comments> 
    </product> 
    <book IDREF="163.24.12"> 
     <title>Core Java</title> 
    </book> 
    <book IDREF="185.3.16"> 
     <title>C++ Development</title> 
    </book> 
    <journal IDREF="332.17.25"> 
     <title>Mathematics and Computing</title> 
    </journal> 
</bookshop> 

をそして私が達成しようとしている出力は、次のとおりです。

<title>Core Java</title> 
<title>Mathematics and Computing</title> 

ブックC++開発者のIDREFでのIDと一致するため子コメントに価値がない商品。

xqueryを使用してスクリプトを作成しようとしましたが、それは子供のコメントも空白の別個のID属性を持つすべての要素の商品を検索しようとしましたが、その結果を私が返すことのできるものに翻訳することができます。 (私は本当に私はそれでかなり余裕を作ることができていないので、私は製品を解決できるようになるまで、適切行く返す与えることはできません)しかし、ここで私がこれまで試したものです:

for $id in distinct-values(//product/@ID) 
where count(//product/comments/text()) > 0 
return ...? 

どんな助けでも大歓迎です。

ありがとうございます!

答えて

0

「私はIDによってマッチング製品要素の書籍や雑誌のタイトルを抽出しようとしていますとIDREFがコメントで値を持たない」

これは、1つの可能なのXPathでありますあなたが質問で説明したものを返す:

/bookshop/*[@IDREF = /bookshop/product[normalize-space(comments) = '']/@ID]/title 

あなたは特別いずれか一方のみbookまたはを選択したい場合の場合は、/*の後に単に述語を追加します。[self::book | self::journal]

xpathtester demo

出力:

<title>Core Java</title> 

<title>Mathematics and Computing</title> 

UPDATE:

それはlimitatioについて明確ではありませんn(使用できないXPath式の種類)。あなたは、XPath述語([])を使用することを許可されていないと仮定すると、それは以下のようwhere句に置き換えることができます:

declare variable emptyProductIDs := /bookshop/product[not(comments/text())]/@ID 

for $element in /bookshop/* 
where $element/@IDREF = $emptyProductIDs 
return $element/title 
+0

同じくらい私はXPathを使用したいと、私はこの特定のユースケースのためのXQueryに制限されています – SteppingHat

+0

XPathはXQueryのサブセットです...試してみましたか? – har07

+0

はい、この質問は、私がxpathを使わずにxqueryを使用する必要がある大学の割り当ての一部です。残念ながら、私はxpathを私が望むほど使うことはできません。 – SteppingHat

関連する問題