我正面临着Xquery的问题。 下面是xml的示例,我将应用xquery来获取基于作者和年份的价格值。但是查询返回Price标签中的所有值。
书签数量不是有限的,可以是1到N.
XML:
<root>
<_1>
<book >
<author>Vaidyanathan Nagarajan</author>
<year>2010</year>
<price>60</price>
</book>
<book >
<author>Vaidyanathan Nagarajan</author>
<year>2009</year>
<price>50</price>
</book>
</_1>
</root>
的XQuery:
for $record in /root/*
where $record/book/year='2009' and $record/book/author='Vaidyanathan Nagarajan'
return
fn:data($record/book/price)
输出: 60 50
所需输出: 50
由于
答案 0 :(得分:0)
您当前的XPath /root/*
与/root/_1
匹配,而where子句会测试_1
元素是否包含book
元素year
是2009年,它有一个book
元素的作者是Vaidyanathan Nagarajan。请注意,可能有任何书籍满足任一条件 - 并不是说有一本书通过了这两个标准。 where子句将消除不满足where子句条件的$record
项,而不会过滤$record/book
元素。然后,您将返回book/price
的两个/root/_1
值。
如果您只希望price
中的book
满足where子句中的两个条件,请尝试以下操作:
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()