мне нужно вернуть название книг и журналов, где «Джон Доу» является автором, но мой файл XML настроен как:Можно ли использовать OR в предложении where в XQuery?
<library>
<book>...</book>
<article>...</article>
</library>
Есть 6 книг и журналов в общей сложности.
Я знаю, что если это SQL я мог бы сделать что-то вроде:
SELECT title
FROM library
WHERE bookauthor = "John Doe" OR articleauthor = "John Doe"
(, что база данных не будет нормализуется, но я пытаюсь показать, что я думаю, я знаю, что мне нужно сделать , просто не знаю, как с XQuery)
Я попытался следующие, и он вернул все 6 титулов мне:
for $x in doc("xmldata.xml")/library
let $a := $x/article
let $b := $x/book
return ($a/title, $b/title)
Но я не уверен, что делать с предложением where. Точно так же я попробовал следующее и застрял в той же точке:
for $x in doc("xmldata.xml")/library
return ($x/article/title, $x/book/title)
При попытке добавить в где положение все еще возвращает все 6 записей, даже если она должна возвращать только 1 книгу и 1 статью:
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>
Вы можете разместить больший образец исходного XML? Я не вижу ничего плохого в вашем последнем запросе. – wst
Я добавил исходный XML в начало сообщения, спасибо! – user2633709