From: Eric van der Vlist (vdv@dyomedea.com)
Date: 08/06/2001 - 11:44
VIRUEGA Pierre wrote:
>
> Bonjour à tous,
> Est-ce que quelqu'un a une solution en XSL au problème (générique) des
> agrégats?
Sur le problème du "grouping" de manière générale, il existe une
abondante litérature, la meilleure référence se trouvant sans doute sur
le site de Jeni Tennison:
http://www.jenitennison.com/xslt/grouping/
> L'équivalent des clauses group by et having en SQL.
>
> Exemple de fichier XML:
> <ROOT>
> <REC>
> <VAL>A</VAL>
> <NB>10</NB>
> </REC>
> <REC>
> <VAL>B</VAL>
> <NB>3</NB>
> </REC>
> <REC>
> <VAL>A</VAL>
> <NB>5</NB>
> </REC>
> ...
> </ROOT>
>
> et on veut un résultat du type :
> VAL=A CUMUL=15
> VAL=B CUMUL=3
> VAL=C CUMUL=9800
> ....
Pour ce problème précis, la feuille suivante fait l'affaire:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<aggregats>
<xsl:apply-templates
select="/ROOT/REC[not(VAL=preceding-sibling::REC/VAL)]"/>
</aggregats>
</xsl:template>
<xsl:template match="REC">
<xsl:copy-of select="VAL"/>
<CUMUL>
<xsl:value-of select="sum(../REC[VAL=current()/VAL]/NB)"/>
</CUMUL>
</xsl:template>
</xsl:stylesheet>
Cordialement,
Eric van der Vlist
> Merci pour tout tuyau
> Pierre
>
--
Pour y voir plus clair dans la nebuleuse XML...
http://dyomedea.com/formation/
------------------------------------------------------------------------
Eric van der Vlist http://xmlfr.org http://dyomedea.com
http://xsltunit.org http://4xt.org http://examplotron.org
------------------------------------------------------------------------
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC
webmaster@xmlfr.org
|