2016-04-27 48 views
0

XML文件的Xquery而使用不同的值

<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

它返回的所有產品,因爲所有產品的ID匹配鏈路ID。 (您return語句的這一部分: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) 
+0

如何修改這部分得到產品的所有數據?如果我將最後一行改爲:'return/map/products/product [@ id = $ prodid]'只返回一個產品 – frgtv10

+0

'如果我返回數據($ prodid)'則返回正確的多個ID – frgtv10

+0

@ frgtv10 - 你在用什麼處理器?我正在使用Saxon-HE 9.5,並且將最後一行更改爲'return/map/products/product [@ id = $ prodid]'正確返回兩個'product'元素。 –