Ceci est mon deuxième article seulement et j'espère que vous pourrez m'aider. J'ai trouvé des questions similaires, mais soit ils étaient légèrement différents, soit je suis incapable de transférer les solutions à mon problème.XQuery: Regroupement par un élément et calculs basés sur des éléments qui ont les mêmes critères de regroupement
J'ai la source suivante:
<?xml version="1.0" encoding="UTF-8"?>
<goods>
<item>
<groupIdentification>001</groupIdentification>
<measures>
<measure type="piece">
<value>100</value>
<unit>PK</unit>
</measure>
<measure type="weight">
<value>100</value>
<unit>KG</unit>
</measure>
</measures>
</item>
<item>
<groupIdentification>002</groupIdentification>
<measures>
<measure type="piece">
<value>200</value>
<unit>PK</unit>
</measure>
<measure type="weight">
<value>200</value>
<unit>KG</unit>
</measure>
</measures>
</item>
<item>
<groupIdentification>001</groupIdentification>
<measures>
<measure type="piece">
<value>300</value>
<unit>PK</unit>
</measure>
<measure type="weight">
<value>300</value>
<unit>KG</unit>
</measure>
</measures>
</item>
</goods>
Sur la base de la valeur d'identification de groupe distinct Je veux produire une instance d'un <groupedItem>
. Dans le <groupedItem>
Je veux faire référence à la <groupIdentification>
(mais une seule valeur) et résumer différentes mesures, ou toute autre valeur, qui partagent le même groupe d'identification.
La structure cible que je veux atteindre est donc:
<?xml version="1.0" encoding="UTF-8"?>
<goods>
<groupedItem>
<groupIdentification>001</groupIdentification>
<measures>
<measure type="piece">
<value>400</value>
<unit>PK</unit>
</measure>
<measure type="weight">
<value>400</value>
<unit>KG</unit>
</measure>
</measures>
</groupedItem>
<groupedItem>
<groupIdentification>002</groupIdentification>
<measures>
<measure type="piece">
<value>200</value>
<unit>PK</unit>
</measure>
<measure type="weight">
<value>200</value>
<unit>KG</unit>
</measure>
</measures>
</groupedItem>
</goods>
S'il vous plaît aidez-moi à expliquer comment je peux y parvenir et ce que le mécanisme est. J'ai un peu de mal à dire à la requête de résumer des choses qui partagent le même "élément de regroupement".
Merci d'avance.
EDIT
Si j'utilise la requête suivante, je ne reçois que 2 groupedItems
, mais je ne continue dans les niveaux inférieurs.
xquery version "3.0";
<goods>
{
for $item in goods/item
let $group := $item/groupIdentification
group by $group
return
<groupedItem>
{
for $groupIdentification in goods/item/groupIdentification
(: this is where I fail to get the connection :)
return
<groupIdentification>{ data($groupIdentification) }</groupIdentification>
}
(: no need for measure here yet, first need to solve the problem itself :)
</groupedItem>
}
</goods>
je reçois:
<?xml version="1.0" encoding="UTF-8"?>
<goods>
<groupedItem>
<groupIdentification>001</groupIdentification><groupIdentification>002</groupIdentification><groupIdentification>001</groupIdentification>
</groupedItem>
<groupedItem>
<groupIdentification>001</groupIdentification><groupIdentification>002</groupIdentification><groupIdentification>001</groupIdentification>
</groupedItem>
</goods>
XQuery est maintenant à la version 3.0/3.1 qui a une clause 'group' alors avez-vous essayé d'utiliser cela? S'il vous plaît montrer votre code XQuery. –
'groupe par', c'est;) https://www.w3.org/TR/xquery-30/#id-group-by – joewiz
Merci pour vos réponses jusqu'à présent. S'il vous plaît voir mes explications supplémentaires. Le regroupement fonctionne au niveau supérieur, mais je ne sais pas comment continuer à traiter les niveaux inférieurs en conséquence. – PatrickSchenker