Bon, si tu as un processeur XSLT qui supporte le standard 2.0 comme Saxon, pas de problème, tu peux utiliser l'élément xsl:for-each-group
Ceci répond à ton problème (pour un nombre quelconques de catégories):
On groupe les éléments quantité par la valeur de l'élément catégorie du produit, et pour chaque groupe, on somme les éléments du groupe avec la fonction standard sum().
Code :
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match = "magasin" > <xsl:for-each-group select="produit/stockage/quantite" group-by="../../categorie[text()]"> <xsl:value-of select="../../categorie[text()]"/> <xsl:text>: </xsl:text> <xsl:value-of select="sum(current-group())"/> <xsl:text>
</xsl:text> </xsl:for-each-group> </xsl:template> </xsl:stylesheet>
|
Le résultat après processing par saxon sur ton document initial est:
categorie1: 3400 categorie2: 3600 |
Bon par contre, si tu n'as pas de processeur XSLT qui supporte la version 2 du standard (comme hélas, une bonne partie des browser internet), c'est en général assez difficile, tu peux peut être t'inspirer de ce document: http://www.xml.com/lpt/a/951 (section Grouping Simplified) qui a une version xsl:for-each-group et une (complexe) sans, pour un même résultat.
A+,
Message édité par gilou le 07-01-2011 à 22:43:33
---------------
There's more than what can be linked! -- Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻