2013-11-02 10 views
6

Ich bekomme mein gewünschtes Schema. Aber die eine Sache, die ich tun muss, ist, doppelte Werte zu beseitigen. Daher verwende ich unterschiedliche Werte, aber diese Funktion zeigt alle Werte innerhalb eines Elements an.Xquery distinct-values ​​

Eingabeschema:

<?xml version="1.0" encoding="UTF-8"?> 
<hotel> 
<food> 
    <name>Burger</name> 
    <cost>20</cost> 
</food> 
<food> 
    <name>Pizza</name> 
    <cost>20</cost> 
</food> 
<food> 
    <name>Cola</name> 
    <cost>5</cost> 
</food> 
<food> 
    <name>Lemonade</name> 
    <cost>5</cost> 
</food> 
<food> 
    <name>Ice Cream</name> 
    <cost>10</cost> 
</food> 
<food> 
    <name>Cookies</name> 
    <cost>10</cost> 
</food> 
</hotel> 

Ausgang derzeit:

<type> 
<cost>01</cost> 
<food>burger fries cola</food> 
</type> 

Wunsch:

<type> 
<cost>01</cost> 
<food>burger</food> 
<food>fries</food> 
<food>cola</food> 
</type> 

Im Grunde das Essen alle für diesen Preis bekommen.

Mein Xquery ist wie folgt:

let $cost:= doc("Untitled7.xml")/hotel/food/cost 
for $unique in distinct-values(doc("Untitled7.xml")/hotel/food/cost) 
let $food:= distinct-values(doc("Untitled7.xml")hotel/food[cost=$unique]/name) 
where $unique = $cost 
return 
<type> 
<year>{$unique}</year> 
<food>{$food}</food> 
</type> 

Jede mögliche Hilfe geschätzt wird :)

Antwort

4

distinct-values ​​() wird eine Folge von Strings zurückgeben: ('Burger', 'Pommes', ' Cola '), aber jetzt gibst du es sofort aus. Was Sie tun müssen, ist Iterieren über Ihre $ Lebensmittel-Variable in einem anderen FLWOR-Anweisung:

return 
<type> 
<year>{$unique}</year> 
{ 
    for $f in $food return <food>{$f}</food> 
} 
</type>