2016-04-27 7 views
0

XML-Datei mitXquery während distinct-values ​​

<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> 

ich folgenden Xquery bin mit den products/@id, geordnet nach den entsprechenden link/@ordernum zu bekommen, aber nur einmal für die gleiche Gruppe.

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

Erwartete Ausgabe: 10, 20

Received Ausgang: 10, 20, 30

Antwort

1

Es Alle Produkte die Rückkehr, weil all Produkt-IDs einen Link-ID entspricht. (Dieser Teil der return-Anweisung: product[@id=data($linkid/@id)])

Vielleicht zuerst die for Schleife über die Produktgruppen versuchen zu tun ...

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

Wie um diesen Teil zu ändern, dass alle Daten aus den Produkten zu bekommen? Wenn ich die letzte Zeile zu: 'return/map/products/product [@ id = $ prodid]' ändere, gibt es nur ein Produkt zurück – frgtv10

+0

wenn ich 'return data ($ prodid)' zurückschicke gibt es mir die richtigen multiplen IDs – frgtv10

+0

@ frgtv10 - Welchen Prozessor benutzen Sie? Ich benutze Saxon-HE 9.5 und ändere die letzte Zeile in 'return/map/products/product [@ id = $ prodid]' korrekt und gibt beide 'product' Elemente zurück. –