2016-04-07 10 views
0

は、私が「ジョン・ドウは、」著者である書籍や雑誌のタイトルを返す必要があるが、私のxmlファイルは次のように設定されている:XQueryのwhere節でORを使用できますか?

<library> 
<book>...</book> 
<article>...</article> 
</library> 

は全部で6冊の本と雑誌があります。

私は、これはSQLだった場合、私のような何かができることを知っている:

SELECT title 
FROM library 
WHERE bookauthor = "John Doe" OR articleauthor = "John Doe" 

データベースは、正規化ではないでしょうが、私は私は私が何をする必要があるか知っていると思うことを示すためにしようとしていること何

for $x in doc("xmldata.xml")/library 
let $a := $x/article 
let $b := $x/book 
return ($a/title, $b/title) 

しかし、私はわからない:、どれだけのXQueryとわからない)

私は次のことを試してみました、それが私に全6つのタイトルを返さwhere節と関係がある。同様に私は、次を試してみましたが、同じポイントで捕まってしまった:

:私は句が、それはまだそれが唯一の1冊の本と1品を返す必要がありますにもかかわらず、すべての6つのエントリを返しどこに追加しようとすると

for $x in doc("xmldata.xml")/library 
return ($x/article/title, $x/book/title) 

for $x in doc("xmldata.xml")/library 
where $x/article/author = 'John Doe' 
where $x/book/author = 'John Doe' 
return ($x/article/title, $x/book/title) 

誰も私を助けてくれますか?たぶん私を正しい方向に向けるか、どこに間違っているのかを指摘してください。

完全なXMLファイル:

<library> 
<book> 
    <author>John Doe</author> 
    <title>Turnitin</title> 
</book> 
<article> 
    <author>John Doe</author> 
    <title>Evaluating</title> 
</article> 
<article> 
    <author>Shannon, L.</author> 
    <title>Reconceptualising</title> 
</article> 
<book> 
    <author>Burden, David</author> 
    <title>An evaluation</title> 
</book> 
<article> 
    <author>Moscrop, C.</author> 
    <title>Evaluating a systematic method</title> 
</article> 
<book> 
    <author>Beaumont, C.</author> 
    <title>Beyond e-learning</title> 
</book> 
</library> 
+0

に相当しているのですか?あなたの最後の質問に間違ったことはありません。 – wst

+0

ソースXMLを投稿の最後に追加しました。ありがとうございます! – user2633709

答えて

0

申し訳ありませんが、私はあなたが照会されたパスを逃しました。ライブラリ要素が1つしかないため、forループが1回だけ繰り返してから、少なくとも1つが<author>の句に一致すると、<library>からすべての値が返されました。

ソリューションは、階層内の1レベル下反復することです:

for $x in doc("xmldata.xml")/library/* 
where $x/author = 'John Doe' 
return $x/title 

それとも、非常に明確にしたい場合は、選択した要素に:

for $x in doc("xmldata.xml")/library/(article|book) 
... 

のための値の出力を制御するにはあなたは見返りに異なるXPathを使用することができます異なる要素:あなたがワットを使用することができます

... 
return ($x/self::book/title, $x/self::article/author) 
+0

私はあなたの返事を理解していますか分かりませんか?私の質問に間違いがあったと言っていますか?ライブラリ/記事/著者= "John Doe"または図書館/本/著者= "John Doe" – user2633709

+0

が申し訳ありませんが、私はあまりにも早く回答しました! 「申し訳ありませんが、私はあなたが照会していた道を見逃していました。それは素晴らしい、感謝の作品!説明は役に立ちます – user2633709

+0

こんにちは私はやりたいことがもう1つあります。これは記事の著者と書籍のタイトルを返すことです。私が著者に戻り値を追加すると、それでもタイトルが返されます。その周りには何か方法はありますか? – user2633709

0

ildcard *は関係なく、自分の名前の要素を一致させる:

doc("xmldata.xml")/library/*[author = 'John Doe']/title 

これはあなたがソースXMLのより大きなサンプルを投稿することができ、より詳細なFLWOR式

for $entry in doc("xmldata.xml")/library/* 
where $entry/author = 'John Doe' 
return $entry/title 
+0

ありがとうございます! :D – user2633709

+0

こんにちは申し訳ありませんが私はやりたいことは、記事の著者と本のタイトルを返すことです。私が著者に戻り値を追加すると、それでもタイトルが返されます。その周りには何か方法はありますか? – user2633709

+0

これを実行する方法はたくさんあります。 '$ Doctor '/ author、$ lib/book [author =' John Doe '] $ this- /タイトル) '。さらなる質問については、新しいStackOverflowエントリを開いてください。 –

関連する問題