从以下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]
它有效时,我才能获得孔产品列表。
如何限制?
答案 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]