From: Cyril Vidal (cyril@planetexml.com)
Date: 13/05/2003 - 11:23
Bonjour,
Ceci est un problème classique de regroupement, dont une des solutions
peut-être l'utilisation de l'algorithme de Muench, du nom de son auteur
Steve Muench, basé sur xsl:key et generate-id().
Pour une bonne introduction, voir notamment:
http://www.jenitennison.com/xslt/grouping/muenchian.html
Ici, on aura quelque chose du style:
<xsl:key name="type" match="//C" use="."/>
....
<xsl:for-each select="//C[generate-id(.) = generate-id(key('type', .) [1])]>
<row><xsl:value-of select="."/></row>
</xsl:for-each>
...
- l'expression key('type', .) renvoie un ensemble de noeuds de type C de
même contenu;
- l'expression key('type', .)[1] renvoie le premier élément de cet ensemble;
- l'expression generate-id(key('type',.)[1]) renvoie l'identifiant de ce
premier élément
et pour trouver tous les C qui sont en première position dans leur entrée
d'index, on ne prend donc que ceux pour lesquels l'identifiant donné par
generate-id() est égal au résultat de l'expression précédente, d'où
l'expression un peu compliquée ;-)) suivante:
//C[generate-id(.) = generate-id(key('type', .) [1])]
Cordialement,
Cyril.
----- Original Message -----
From: "Dobbels Guillaume" <dobbels.guillaume@sonycom.com>
To: <xml-tech@xmlfr.org>
Sent: Tuesday, May 13, 2003 12:31 PM
Subject: [xml-tech] Eviter la repetition d'elements
>
>
> Bonjour,
>
> je vous transmets mon probleme en esperant que qq1 puisse me donner la
> solution:
>
> Voici mon fichier xml a transformer:
>
> <A>
> <B>
> <C>type1</C>
> </B>
> <B>
> <C>type2</C>
> </B>
> <B>
> <C>type3</C>
> </B>
> <B>
> <C>type2</C>
> </B>
> <B>
> <C>type1</C>
> </B>
> <B>
> <C>type...N</C>
> </B>
> </A>
>
> Et je voudrais obtenir uniquement les types non redondants dans une
> table. Tous les types existants en fait. Sans connaitre au prealable les
> differents types...
>
> -> <row>type1</row>
> <row>type2</row>
> <row>type3</row>
> <row>type...N</row>
>
> Comment faire? D'avance merci!
>
> Guillaume
> --
> 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)
>
>
--
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
|