在使用distinct-values时使用Xquery

时间:2016-04-27 17:00:43

标签: xml xpath xquery

XML文件

<map>

    <links>
        <link id="10" ordernum="0"></link>
        <link id="20" ordernum="1"></link>
        <link id="30" ordernum="2"></link>
    </links>

    <products>
        <product id="10" group="2">...</product>
        <product id="20" group="1">...</product>
        <product id="30" group="2">...</product>
    </products>

</map>

我使用以下Xquery获取products/@id,按相应的link/@ordernum排序,但只针对同一组排序一次。

for $linkid in //links/link
order by $linkid/@ordernum
return distinct-values(data(//products/product[@id=data($linkid/@id)]/@id))

预期产量: 10,20

收到的输出: 10,20,30

1 个答案:

答案 0 :(得分:1)

它返回所有产品,因为所有产品ID都与链接ID匹配。 (这部分退货声明:product[@id=data($linkid/@id)]

也许首先尝试对产品组进行for循环...

for $prodgroup in distinct-values(/map/products/product/@group)
let $prodid := /map/products/(product[@group=$prodgroup])[1]/@id
order by /map/links/link[@id = $prodid]/@ordernum
return data(/map/products/product[@id=$prodid]/@id)