Ваш текущий XPath /root/*
совпадает с /root/_1
, а предложение where проверяет, имеет ли этот элемент _1
элемент book
, который year
равен 2009, и что он имеет элемент book
, автор которого являетсяВайдьянатхан Нагараджан.Обратите внимание, что может быть любая книга, которая удовлетворяет любому условию - это не значит, что есть одна книга, которая удовлетворяет обоим этим критериям.Предложение where исключит элементы $record
, которые не удовлетворяют критериям условия where, а не отфильтрует элементы $record/book
.Затем вы возвращаете оба значения book/price
из /root/_1
.
Если вам нужен только price
из book
, который удовлетворяет обоим условиям в предложении where, тогда попробуйтеthis:
for $book in /root/*/book
where $book/year='2009' and $book/author='Vaidyanathan Nagarajan'
return
fn:data($book/price)
Вы также можете достичь того же без FLWOR и просто использовать XPath с фильтром предикатов:
/root/*/book[year='2009' and author='Vaidyanathan Nagarajan']/price/fn:data()