Bonjour,
d'abord, désolé pour les fautes de typos, je suis allé un peu vite lors
de ma première réponse.
Le tableau se répète 2 fois car dans votre dernier template de copie par
défaut, il y a 2 apply-templates équivalents.
Je voulais écrire :
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="node()"/>
pour mettre en évidence qu'on copiait les attributs et les noeuds,
et j'ai écrit la forme synthétique 1, suivie de 2
1. <xsl:apply-templates select="@*|node()"/>
2. <xsl:apply-templates/>
sachant que les lignes 1 et 2 sont équivalentes, il y a donc répétition
des noeuds copiés par défaut, ce qui peut entrainer la répétition de
votre tableau.
Le for-each sélectionne les noeuds que vous indiquez avec votre xpath +
l'opération de tri éventuelle. Il suffit donc de placer le for-each
autour de votre apply-templates, comme ceci :
<xsl:for-each select="entite">
<xsl:sort select="cout" order="ascending"/>
<xsl:apply-templates select="."/>
</xsl:for-each>
Du coup, vos données sont d'abord triées sur l'élément cout, fils de
entite, par ordre ascendant. Puis, pour chaque donnée ainsi triée, le
parser recherche ensuite les modèles à appliquer à l'entité courante.
Jean-Christophe
Gillot a écrit :
> Bonjour,
>
> merci beaucoup !
>
> Cependant, je ne parviens pas à placer le
>
> <xsl:for-each select="entite">
> <xsl:sort select="@*|node()"/>
>
> comme il faut... faut il que je modifie le XML pour avoir un niveau de
> plus "cout" ?
>
> et étrangement, mon tableau se répète deux fois...
>
> voici le xsl :
>
> <xsl:template match="/">
> <html>
> <head>
> <title>titre
> </title>
> </head>
> <body>
> <p>Page n</p>
>
> <table width=" 100%" border="1" cellspacing="1" cellpadding="1" >
> <tr>
> <td><div align="center">Entité numéro </div> </td>
> <td><div align="center">Cout</div> </td>
> <td><div align="center">Cout</div> </td>
> <td><div align="center">Cout</div> </td>
> </tr>
> <xsl:apply-templates/>
> </table>
> </body>
> </html>
> </xsl:template>
>
> <xsl:template match="entite">
> <tr>
> <xsl:apply-templates/>
> </tr>
> </xsl:template>
>
> <xsl:template match="entite/*">
> <td>
> <xsl:apply-templates/>
> </td>
> </xsl:template>
>
> <xsl:template match="@*|node()">
> <xsl:copy>
> <xsl:apply-templates select="@*|node()"/>
> <xsl:apply-templates/>
> </xsl:copy>
> </xsl:template>
>
> </xsl:stylesheet>
>
> Merci de l'aide !
>
> Jean-Christophe Kermagoret a écrit :
>
>>Bonjour, une façon de s'y prendre consiste à avoir une approche
>>déclarative, c'est à dire de dire ce que vous voulez :
>>
>>Si on traduit votre xml en html, cela correspond à dire que pour chaque
>>entité, vous aurez une ligne et pour chaque élément dans entité, vous
>>aurez une colonne,
>>
>>ce qui se traduit en XSLT par :
>>
>><xsl:template match="/">
>> <html>
>> <head/>
>> <body>
>> <xsl:apply-templates/>
>> </body>
>> </tr>
>></xsl:template>
>>
>><xsl:template match="entite">
>> <tr>
>> <xsl:apply-templates/>
>> </tr>
>></xsl:template>
>>
>><xsl:template match="entite/*">
>> <td>
>> <xsl:apply-templates/>
>> </td>
>></xsl:template>
>>
>><xsl:template match="@*|node()">
>> <xsl:copy>
>> <xsl:apply-templates select="@*|node()"/>
>> <xsl:apply-templates/>
>> </xsl:copy>
>></xsl:templtate>
>>
>>Votre tableau doit bien sûr avoir exactement la même structure.
>>Si vous voulez trier d'abord vos données sur le coût par exemple, vous
>>devez faire un for-each avec une instruction sort dedans.
>>
>>Pour vos couleurs, vous pouvez :
>>* soit faire un test sur le nom du noeud
>>* soit intercepter explicitement chaque noeud
>>* soit pour chaque entite/*, donner une classe css avec une ligne du style :
>> <td class="{local-name()}"/>
>>ce qui vous donnera automatiquement class="cout_1", class="cout_2" selon
>> le nom du noeud où vous êtes.
>>
>>JC
>>
>>Gillot a écrit :
>>
>>
>>>Bonjour,
>>>
>>>j'ai un petit soucis technique : j'ai des données XML qui se présentent
>>>comme ça :
>>>
>>><entite>
>>><numero_entite>1</numero_entite>
>>><cout_1>10</cout_1>
>>><cout_2>20</cout_2>
>>><cout_3>50</cout_3>
>>></entite>
>>>
>>>etc... pour n entités, et je ne parvient pas à obtenir le xslt
>>>permettant de présenter ces données dans un html par colonnes, les couts
>>>étant classés du plus grand (en gauche de la colonne) au plus petit, la
>>>couleur des cellules permettant de les différencier entre eux (rouge
>>>pour le cout_1, blanc pour le cout_2 et vert pour le cout_3 )
>>>
>>>comment devrais-je m'y prendre ?
>>>
>>>merci pour votre aide
>
>
>
>
>
>
>
> ___________________________________________________________________________
> Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger
> Téléchargez cette version sur http://fr.messenger.yahoo.com
>
> --
> 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)
>
--
Jean-Christophe Kermagoret
jck@BabelObjects.Com
--
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)
Received on Mon Jul 18 07:10:35 2005