【问题标题】:How to extract the first element of a list in XQuery 1.0?如何在 XQuery 1.0 中提取列表的第一个元素?
【发布时间】:2016-01-26 19:26:55
【问题描述】:

我想从列表$res/Name 中提取第一个元素。在我的解决方案中,我获得了所有列表,而不仅仅是第一个元素,这是我写的。

for $res in /Restaurants/Restaurant
let $n := count($res/Dish)
order by $n descending
return ($res/Name)[1]

您可以在此处查看 XML 和结果:http://www.xpathtester.com/xquery/7992b12910492f493273835e828dc386

问题出在哪里?

【问题讨论】:

    标签: xml xpath xquery


    【解决方案1】:

    位置过滤器是 return 子句表达式的一部分,因此您将获得每个 $res 的第一个 Name

    但是您希望它应用于完整的结果。移动括号应该可以解决这个问题:

    (
      for $res in /Restaurants/Restaurant
      let $n := count($res/Dish)
      order by $n descending
      return $res/Name
    )[1]
    

    【讨论】:

      【解决方案2】:

      如果您能够使用 XQuery 3.0,它知道帮助函数 fn:head($sequence)fn:tail($sequence)

      例子:

      head(1 to 10)
      1
      tail(1 to 10)
      2 3 4 5 6 7 8 9 10
      

      【讨论】:

      • 抱歉,如果我使用了 fn:head,我不能使用 XQuery 3.0 BTW 我可以写:for $res in /Restaurants/Restaurant let $n := count($res/Dish) order by $n descending return head($res/Name)
      • 不,您应该将head(...) 包裹在整个语句周围,类似于谓词。最后,headtail 只是位置谓词 [1][position() ne 1] 的语法糖,但可以帮助编写更易于阅读的代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 2020-09-15
      • 2012-08-21
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多