Bon désolé je ne comprends toujours pas ce que vous voulez mettre dans vos entêtes (non je ne fais pas exprès ;) )
Peut-être qu'avec un véritable exemple ?
<voitures>
<voiture>
<modele>luxe</modele>
<siege>
<assise>siege cuir</assise>
<appuietete>reglable<appuietete>
</siege>
</voiture>
<voiture>
<modele>sport</modele>
<siege>
<assise>siege baquet</assise>
</siege>
<option>peinture metallisee</option>
</voiture>
</voitures>
Cela donnerait quoi ?
Essayez peut-être ceci qui transformera votre structure arbo en une structure "à plat" (2 lignes ; n colonnes)
..
<body>
<table border="1">
<tr>
<xsl:apply-templates select="*" mode="entete" />
</tr>
<tr>
<xsl:apply-templates select="*" mode="contenu" />
</tr>
</table>
</body>
..
<!-- 1ere passe construction des entetes de colonnes-->
<xsl:template match="*" mode="entete">
<td><xsl:value-of select="name()" /></td>
<xsl:apply-templates select="*" mode="entete"/>
</xsl:template>
<!-- 2eme passe recuperation du contenu -->
<xsl:template match="*" mode="contenu">
<td><xsl:value-of select="text()" /></td>
<xsl:apply-templates select="*" mode="contenu"/>
</xsl:template>
-----Message d'origine-----
De : Lasserre Lionel [mailto:llasserre@gfi.fr]
Envoyé : lundi 5 décembre 2005 15:17
À : xml-tech@xmlfr.org
Objet : [xml-tech] Re: XML To HTML
Merci d'avance pour l'interet ;>
L'objectif recherché est de faire un tableau HTML comprenant une ligne d'entête (correspondant aux nom des noeuds XML) suivi de plusieurs lignes de données.
Dans le cas suivant :
XML :
<NoeudRoot>
<NoeudMulti>
<Valeur1> 1 /
<Valeur2> 2 /
<Valeur3> 3 /
<Noeud>
<ValeurA> A /
<ValeurB> B /
...
j'arrive à génerer un tableau HTML comme ceci :
|Valeur1|Valeur2|Valeur3|Noeud|ValeurA|ValeurB| ceci etant la ligne
|Valeur1|Valeur2|Valeur3|Noeud|ValeurA|ValeurB| d'entête
|1|2|3|A|B| ceci etant les lignes de valeurs .
| représentant les <td>
Le XSLT que j'utilise n'as pas beaucoup d'interet car il ne fonctionne que dans ce cas simple, le voici quand même créé a l'aide du code de MR <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<p>
<table border="1">
<tbody>
<tr>
<xsl:for-each select="root/*[position()=1]//*">
<xsl:if test="not(*)">
<td>
<xsl:value-of select="name()"/>
</td>
</xsl:if>
</xsl:for-each>
</tr>
<xsl:apply-templates select="*"/>
</tbody>
</table>
</p>
</body>
</html>
</xsl:template>
<xsl:template match="*">
<xsl:choose>
<xsl:when test="*//*">
<tr>
<xsl:apply-templates select="*"/>
</tr>
</xsl:when>
<xsl:when test="*">
<xsl:apply-templates select="*"/>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:value-of select="."/>
</td>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Mon problème intervient lorsque <Noeud> est un noeud multi, et là forcement ca ne fonctionne plus vu que ma création d'entête place autant de <Noeud> que ce qu'il y a dans la première banche (normal c'est ce qu'on lui demande), et les données ne sont pas au mieux .
Je ne sasi pas trop comment resoudre mon problème, ni même par quel bout l'attaquer :)
Le but etant de transformer le XML en tableau HTM lineaire (un peu comme un csv en fait).
Toute aide est la bienvenu et encore merci .
L.Lasserre
PENNEC Vincent a écrit :
>Bonjour,
>
>Quel est exactement l'objectif recherché ?
>
>
>
>>Je ne sais pas encore si ce sera possible, car le but est de faire un
>>tableau HTML avec une ligne d'entête.
>>
>>
>
>Qu'est-ce que vous entendez par ligne d'entête ?
>
>
>
>>NoeudRoot
>> NoeudMulti
>> Valeur1
>> Valeur2
>> Valeur3
>> NoeudMulti11
>> Valeur1
>> Valeur2
>> NoeudMulti12
>> Valeur1
>> Valeur2
>> ....
>>
>>J'ai du mal à pouvoir recreer les lignes du style
>>NoeudMulti|Valeur1|Valeur2|Valeur3|NoeudMulti11|Valeur1|Valeur2
>>
>>
>
>Pouvez-vous donner le résultat attendu pour les premières lignes ? Y compris le code html parce qu'on (je) ne saisit pas si le | symbolise un <td> ou une concaténation des différents name() pour aboutir à un "identifiant".
>
>Un présentation arborescente ne suffit-elle pas pour votre besoin ?
>Si dessous une (mauvaise) adaptation du code de MR pour une présentation verticale.
>
><?xml version="1.0"?>
><xsl:stylesheet version="1.0"
>xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:output method="html" encoding="Windows-1252"/>
>
> <xsl:template match="/*">
> <html>
>
> <style type="text/css">
> .FERME {background-color:#BBBBCC; font-family: Verdana; font-size: 8pt; cursor:pointer;}
> .OUVERT { background-color:#EEF3FB; font-style:blod;font-family:
>Verdana;
>font-size: 8pt; cursor:pointer;}
> .DERNIER { font-style:blod;font-family: Verdana; font-size: 8pt;}
> .VALEURNOEUD { background-color:#FFFFCC; font-family: Verdana; font-size:
>8pt;}
> .ATTRIBUT {color:#999999;}
> </style>
>
>
> <script language="javascript">
> function affiche_cache(objet){
> ObjetCible=objet.parentNode.nextSibling;
> if (ObjetCible.style.display=="none"){
> ObjetCible.style.display="block";
> objet.className="OUVERT";
> }
> else{
> ObjetCible.style.display="none";
> objet.className="FERME";
> }
> }
> </script>
>
> <body>
> <xsl:apply-templates select="*"/>
> </body>
> </html>
> </xsl:template>
>
>
> <xsl:template match="*">
> <table border='1' style="margin-left:15px">
> <tr>
> <td><b> <xsl:value-of select="name()"/></b>
> (<span class="ATTRIBUT"><xsl:for-each
>select="@*"><b><xsl:value-of select="name()"/></b> : <i><xsl:value-of
>select="."/></i>  </xsl:for-each></span>)
> </td>
> </tr>
>
> <xsl:if test="*">
> <tr>
> <td>
> <xsl:apply-templates select="*"/>
> </td>
> </tr>
> </xsl:if>
> </table>
> </xsl:template>
></xsl:stylesheet>
>
>
>-----Message d'origine-----
>De : Lasserre Lionel [mailto:llasserre@gfi.fr] Envoyé : vendredi 2
>décembre 2005 17:16 À : xml-tech@xmlfr.org Objet : [xml-tech] XML To
>HTML
>
>Merci de l'aide, j'avance doucement, car effectivement il ne semble pas simple de présenter les éléments verticalement.
>j'ai reussit à faire un tableau avec un XML simple style NoeudRoot
> NoeudMulti
> Valeur1
> Valeur2
> Valeur3
>qui devient
> NoeudMulti|Valeur1|Valeur2|Valeur3
>
>Par contre si je me retrouve avec
> NoeudRoot
> NoeudMulti
> Valeur1
> Valeur2
> Valeur3
> NoeudMulti11
> Valeur1
> Valeur2
> NoeudMulti12
> Valeur1
> Valeur2
> ....
>
>J'ai du mal à pouvoir recreer les lignes du style
>NoeudMulti|Valeur1|Valeur2|Valeur3|NoeudMulti11|Valeur1|Valeur2
>NoeudMulti|Valeur1|Valeur2|Valeur3|NoeudMulti12|Valeur1|Valeur2
>
>Car je n'arrive à a recuperer les differentes valeur des ancètres de NoeudMulti1?, Je recherche une solution et vous informes de la suite ...
>
>Cdt
>Lionel
>
>
>
>Matthieu Ricaud a écrit :
>
>
>
>>Bonjour,
>>
>>J'ai déjà eu l'occasion de faire cela, la xsl suivante est générique
>>et affiche n'importe quel fichier xml sous la forme d'un tableau HTML
>>avec en prime les attributs. Les cellules sont cliquables pour
>>afficher les sous-noeud (c'est du javascript).
>>
>><?xml version="1.0"?>
>>...</xsl:stylesheet>
>>
>>Il n'affiche pas les commentaires, ni les "processing-instructions" et
>>puis ce serait peut être mieux que le tableau présente les élément
>>verticalement plutôt qu'horizontalement...
>>
>>si vous l'améliorez, n'hésitez pas à en faire part :)
>>
>>Cordialement,
>>
>>Matthieu
>>
>>-----Message d'origine-----
>>De : xml-tech-bounce@xmlfr.org [mailto:xml-tech-bounce@xmlfr.org]De la
>>part de Lasserre Lionel Envoyé : mercredi 23 novembre 2005 15:36 À :
>>xml-tech@xmlfr.org Objet : [xml-tech] XML To HTML
>>
>>
>>Bonjour à tous,
>>
>>je cherche à transformer un fichier XML en tableau HTLM par XSLT, en
>>tentant tant que faire se peut, de faire une XSLT générique
>>(applicable à tous mes xml).
>>
>>Je ne sais pas encore si ce sera possible, car le but est de faire un
>>tableau HTML avec une ligne d'entête.
>>
>>D'ou ma première question :)
>>est il possible d'extraire le nom des noeuds et non pas leur valeur ?
>>
>>le but etant en partant d'un xml de type :
>>
>><root>
>> <Exercice>
>> ValeurExercice
>> <Noeud1>
>> ValeurNoeud1
>> <SousNoeud1>ValeurSousNoeud1</SousNoeud1>
>> <SousNoeud2>ValeurSousNoeud2</SousNoeud2>
>> ...
>> </Noeud1>
>> ...
>> </Exercice>
>> ...
>></root>
>>
>>de générer un Tableau html du type :
>><table>
>> <tr>
>> <td>Noeud1</td><td>SousNoeud1</td><td>SousNoeud2</td> ...
>> </tr>
>> <tr>
>>
>><td>ValeurNoeud1</td><td>ValeurSousNoeud1</td><td>ValeurSousNoeud2</td> ...
>> </tr>
>> ...
>></table>
>>
>>Si vous connaissais une xslt dejà existante .... ;>
>>
>>
>>Merci d'avance .
>>
>>Lionel
>>
>>
>>
>>
>
>
--
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 Dec 5 17:01:36 2005