From: Benoît Barré (benoitbarre@free.fr)
Date: 02/09/2001 - 20:03
Merci bcp Eric,
Avec quelques corrections, ça marche avec le modèle que j'ai donné.
En fait mon modèle est un peu plus compliqué. Je vais continuer mes
investigations.
Voici mon modèle :
<M>
<F>
<I><D>1</D></I>
<T><e n="1">aa</e></T>
</F>
<F>
<I><D>1</D></I>
<T><e n="1">aa</e></T>
</F>
<F>
<I><D>2</D></I>
<T><e n="1">cc</e></T>
</F>
<F>
<I><D>3</D></I>
<T><e n="1">dd</e></T>
</F>
<F>
<I><D>1</D></I>
<T>
<e n="1">bb</e>
<e n="2">zz</e>
</T>
</F>
</M>
avec la feuille de style suivante :
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version
= "1.0" >
<xsl:output method = "html"/>
<xsl:template match="/">
<html>
<ul>
<xsl:apply-templates
select="/M/F[not(I/D=preceding-sibling::F/I/D)]">
<xsl:sort select="I/D"/>
</xsl:apply-templates>
</ul>
</html>
</xsl:template>
<xsl:template match="F">
<li><xsl:value-of select="concat('
Noeud de type ', I/D)"/></li>
<ul><xsl:apply-templates
select="/M/F[ I/D = current()/I/D ]/T/e[@n='1' and not(.=preceding::e
[../I/D = current()/I/D ]) ]">
<xsl:sort select="."/>
</xsl:apply-templates>
</ul>
</xsl:template>
<xsl:template match="e">
<li><xsl:value-of select="concat('
 Enfant ', .)"/></li>
</xsl:template>
</xsl:stylesheet>
Cordialement,
Benoît
----- Original Message -----
From: "Eric van der Vlist" <vdv@dyomedea.com>
To: <xml-tech@xmlfr.org>
Sent: Friday, August 31, 2001 4:07 PM
Subject: [xml-tech] Re: Unicité d'éléments sur deuxniveaux
Bonjour,
On 31 Aug 2001 15:29:17 +0200, Benoît Barré wrote:
>
> Bonjour,
>
>
> J'aimerais obtenir quelque chose comme :
En XSLT ?
>
>
> Noeud de type 1 :
> Enfant aa
> Enfant bb
>
> Noeud de type 2 :
> Enfant cc
>
> Noeud de type 3 :
> Enfant dd
>
>
> C'est à dire : obtenir les éléments différents sur deux niveaux.
>
> à partir de quelque chose comme :
> <x>
> <noeud1 t="1">
> <enfant n="1">aa</enfant>
> </neud1>
> <noeud1 t="1">
> <enfant n="1">aa</enfant>
> </neud1>
> <noeud1 t="2">
> <enfant n="1">cc</enfant>
> </neud1>
> <noeud1 t="3">
> <enfant n="1">dd</enfant>
> </neud1>
> <noeud1 t="1">
> <enfant n="1">bb</enfant>
> </neud1>
> <x>
Non testé mais la construction suivante devrait vous donner une piste ;)
<xsl:template match="/">
<xsl:apply-templates
select="/x/noeud1[not(@t=preceding-sibling::noeud1/@t)]">
<xsl:sort select="@t"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="noeud1"/>
<xsl:value-of select="concat('
Noeud de type ', @t)"/>
<xsl:apply-templates
select="/x/noeud1[ @t = current()/@t ]/enfant[
not(.=preceding::enfant[../@t = current()/@t ]) ]">
<xsl:sort select="."/>
</xsl:apply-templates>
<xsl:template/>
<xsl:template match="enfant">
<xsl:value-of select="concat('
 Enfant ', .)"/>
<xsl:template>
>
> Peut-être est-ce du à la fatigue de la semaine mais je bloque sur le 2ème
niveau
Je pense qu'un des problèmes est que si vous ne faites pas le test de
filtrage du deuxième niveau lors du primier (dans la clause select),
elle est beaucoup plus complexe à écrire.
Cordialement,
Eric van der Vlist
> Benoît
--
Rendez-vous à Paris (XML pour l'e-business)
20010625T105500@xmlfr.org">http://xmlfr.org/actualites/agenda/#20010625T105500@xmlfr.org
------------------------------------------------------------------------
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=subscribe)
--
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
|