xquery问题从子节点获取匹配值的数据

时间:2018-05-23 19:05:47

标签: xquery

我正面临着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

由于

1 个答案:

答案 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()