Xquery按名称排序第二个产品

时间:2015-02-08 12:18:19

标签: xquery

从以下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>

我尝试过(获得第一个,但也必须努力获得第三个......等等):

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

我没有收到正确的订单。只有当我删除[1]它有效时,我才能获得孔产品列表。

如何限制?

2 个答案:

答案 0 :(得分:2)

将数字谓词作为整体放在表达式上:

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

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

答案 1 :(得分:2)

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

现在,您限制在for循环的输入规范中,因此您将对单个进行排序,即 first 产品 - 这显然不是你想要达到的目标(并且似乎都不合理)。

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

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