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

从找到匹配值的子节点获取数据的xquery问题,xquery,Xquery,我面临Xquery的一个问题。 下面是一个xml示例,我在其中应用xquery来获取基于作者和年份的价格值。然而,查询正在从价格标签返回所有值 图书标签的数量不是有限的,可以是1到N XML: 输出: 60 50 所需输出: 五十 谢谢您当前的XPath/root/*与/root/\u 1匹配,where子句测试\u 1元素是否有book元素,该元素的年份是2009年,并且它有book元素,其作者是Vaidyanathan Nagarajan。请注意,可能有任何一本书满足这两个条件——这并不是说

我面临Xquery的一个问题。 下面是一个xml示例,我在其中应用xquery来获取基于作者和年份的价格值。然而,查询正在从价格标签返回所有值

图书标签的数量不是有限的,可以是1到N

XML:

输出: 60 50

所需输出: 五十


谢谢

您当前的XPath
/root/*
/root/\u 1
匹配,where子句测试
\u 1
元素是否有
book
元素,该元素的
年份是2009年,并且它有
book
元素,其作者是Vaidyanathan Nagarajan。请注意,可能有任何一本书满足这两个条件——这并不是说有一本书同时满足这两个条件。where子句将删除不满足where子句条件的
$record
项,而不是过滤
$record/book
元素。然后,您将从
/root/_1
返回两个
book/price

如果您只想从
书籍
中获得满足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()

您是手工键入的,还是在代码/EX1> <代码>中的<代码> > /代码丢失?请将此视为键入错误…谢谢Mads Hansen,您的替代解决方案实际上就是我一直在寻找的。再次感谢!
for $book in /root/*/book
where  $book/year='2009' and $book/author='Vaidyanathan Nagarajan'
return 
  fn:data($book/price)
/root/*/book[year='2009' and author='Vaidyanathan Nagarajan']/price/fn:data()