Xquery获取按名称排序的第二个产品

Xquery获取按名称排序的第二个产品,xquery,Xquery,从以下XML中,我希望获得按@name排序的第n个产品: <products> <product name='200'>...</product> <product name='100'>...</product> <product name='111'>...</product> <product name='100'>...</product> <product name='11

从以下XML中,我希望获得按@name排序的第n个产品:

<products>
<product name='200'>...</product>
<product name='100'>...</product>
<product name='111'>...</product>
<product name='100'>...</product>
<product name='110'>...</product>
</products>
我点的菜不对。只有当我删除
[1]
时,它才能工作,但我会得到孔产品列表


如何在此处进行限制?

将数值谓词作为一个整体放在表达式上:

(
  for $d in //products/product
  order by $d/@name
  return $d
)[1]

for
生成按名称排序的产品元素的整个序列,
[1]
然后是排序序列的索引。

您限制在错误的位置(除了谓词
[1]
之前的
/
是语法错误)

现在,您将
限制在
for
循环的输入规范中,因此您正在对单个产品进行排序,即第一个产品-这显然不是您想要实现的(而且两个产品似乎都不合理)

要在执行循环(和排序)后进行限制,请使用环绕循环的谓词:

(
  for $product in $xml//products/product
  order by $product/@name
  return $product
)[1]
(
  for $product in $xml//products/product
  order by $product/@name
  return $product
)[1]