Re: XSL unique pour XML différent
"Thibaut Gabelle" <[email protected]> Fri, 6 Apr 2007 09:43:01 +0200
| Newsgroups | gmane.text.xml.french.tech |
|---|---|
| Message-ID | <[email protected]> |
Là j'ai pris un exemple parmi d'autres, on pourrait très bien avoir quelque chose de complètement différent (la liste des mères et ses enfants...) Donc la profondeur est constante, mais par type de XML. -----Message d'origine----- De : [email protected] [mailto:[email protected]] De la part de COUTHURES Alain Envoyé : vendredi 6 avril 2007 09:25 À : [email protected] Objet : [xml-tech] Re: XSL unique pour XML différent Re-bonjour, Ca devient plus clair pour moi avec l'exemple concret ! Est-ce que, en fait, la profondeur des éléments est constante ? On a toujours /root/structure/suivi-budg/exercice/section/budget ? Alain COUTHURES <agenceXML> http://www.agenceXML.com Thibaut Gabelle a écrit : > Bonjour et merci pour votre attention, > > En fait ce XML est le résultat d'une recherche. Et je veux donc afficher ce > résultat qui est représenté de manière arborescente dans le XML de manière > "aplatie" en HTML. > Donc en fait dans mon tableau j'aurais une ligne par élément de premier > niveau, ensuite autant de colonne que s'il y a d'éléments "non racine" sous > la forme <nom-element>val-element</nom-element>. > > Si je prends un exemple de XML plus concret. Les budgets par exercice et par > section d'une liste de structure. > Voilà le XML de départ (qui sera donc répété pour X structure) : le nombre > de section, d'exercice, de budget, étant totalement variable. > > <root> > <structure> > <libelle>xmlfr.org</libelle> > <type-str>Site internet</type-str> > <suivi-budg> > <exercice> > <annee>2006</annee> > <plan>M22</plan> > <section> > <type>Hébergement</type> > <budget> > <libelle-budg>Budget Herbergement proposé</libelle-budg> > <type-budg>B</type-budg> > </budget> > <budget> > <libelle-budg>Budget Herbergement alloué</libelle-budg> > <type-budg>B</type-budg> > </budget> > </section> > <section> > <type>Restauration</type> > <budget> > <libelle-budg>Budget Restau proposé</libelle-budg> > <type-budg>B</type-budg> > </budget> > </section> > </exercice> > <exercice> > <annee>2007</annee> > <plan>M22</plan> > <section> > <type>Hébergement</type> > <budget> > <libelle-budg>Budget Herbergement proposé</libelle-budg> > <type-budg>B</type-budg> > </budget> > </section> > <section> > <type>Restauration</type> > <budget> > <libelle-budg>Budget Restau proposé</libelle-budg> > <type-budg>B</type-budg> > </budget> > <budget> > <libelle-budg>Budget Restau proposé 2</libelle-budg> > <type-budg>B</type-budg> > </budget> > <budget> > <libelle-budg>Budget Restau alloué</libelle-budg> > <type-budg>B</type-budg> > </budget> > </section> > </exercice> > <suivi-budg> > <structure> > </root> > > Voilà le HTML souhaité > > <TABLE> > <TR> > <TD>xmlfr.org</TD> > <TD>Site internet</TD> > <TD> > <TABLE> > <TR> > <TD>2006</TD> > <TD>M22</TD> > <TD> > <TABLE> > <tr> > <td>Hébergement</td> > <td> > <table> > <tr> > <td>Budget Herbergement proposé</td> > <td>B</td> > </tr> > <tr> > <td>Budget Herbergement alloué</td> > <td>B</td> > </tr> > </table> > </td> > </tr> > <tr> > <td>Restauration</td> > <td> > <table> > <tr> > <td>Budget Restau proposé</td> > <td>B</td> > </tr> > </table> > </td> > </tr> > </table> > </TD> > </TR> > <TR> > <TD>2007</TD> > <TD>M22</TD> > <TD> > <table> > <tr> > <td>Hébergement</td> > <td> > <table> > <tr> > <td>Budget Herbergement proposé</td> > <td>B</td> > </tr> > </table> > </td> > </tr> > <tr> > <td>Restauration</td> > <td> > <table> > <tr> > <td>Budget Restau proposé 1</td> > <td>B</td> > </tr> > <tr> > <td>Budget Restau proposé 2</td> > <td>B</td> > </tr> > <tr> > <td>Budget Restau alloué</td> > <td>B</td> > </tr> > </table> > </td> > </tr> > </table> > </TD> > </TR> > </TABLE> > </TD> > </TR> > </TABLE> > > -----Message d'origine----- > De : [email protected] [mailto:[email protected]] De la part > de COUTHURES Alain > Envoyé : vendredi 6 avril 2007 06:47 > À : [email protected] > Objet : [xml-tech] Re: XSL unique pour XML différent > > Bonjour, > > J'ai du mal à comprendre la structure des fichiers en question... > > A la lecture, il me semble que ce sont les éléments col1, col2, col3 et > col4 (est-ce limité à 4 ?) qui doivent être "simplement" présentés dans > une table avec saut de ligne chaque fois que l'ordre des colonnes > l'impose et indépendamment de leurs parents. > > L'exemple XSL joint crée des tables HTML imbriquées : est-ce bien ce qui > doit être construit ? > > Bien cordialement, > > Alain COUTHURES > <agenceXML> > http://www.agenceXML.com > > Thibaut Gabelle a écrit : > >> Bonjour, >> >> >> Voici mon besoin : je veux appliquer une transformation XSLT à des >> > fichiers > >> XML pouvant avoir une structure différente, (1-n ; 1-n-n ;...) et pour >> > lequel > >> je ne connais pas le nom des éléments. >> Ci-dessous des exemples de XML avec le résultat souhaité en HTML. >> >> Je voudrais savoir si cela est réellement faisable, sachant que je veux >> qu'un seul XSL générique. >> >> Je débute dans ce domaine et pour l'instant, les XSL que j'arrive à faire >> > ne > >> répondent pas à tous les cas de figure. >> >> >> >> Merci beaucoup. >> >> >> >> Exemple de XSL >> >> >> >> <?xml version="1.0" encoding="UTF-8"?> >> >> <xsl:stylesheet version="1.0" >> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> >> >> <xsl:output method="html" indent="yes"/> >> >> >> >> <!-- Template colonne --> >> >> <xsl:template name="colonne"> >> >> <xsl:if test="count(*) >= 1"> >> >> <td> >> >> <table border="1"> >> >> <xsl:for-each select="*"> >> >> <tr> >> >> <xsl:call-template name="colonne"/> >> >> </tr> >> >> </xsl:for-each> >> >> </table> >> >> </td> >> >> </xsl:if> >> >> <xsl:if test="count(*) = 0"> >> >> <td><xsl:value-of select="."/></td> >> >> </xsl:if> >> >> </xsl:template> >> >> <!-- Fin Template colonne --> >> >> >> >> <xsl:template match="root"> >> >> <table border="1"> >> >> >> >> <!-- Pour Chaque ligne --> >> >> <xsl:for-each select="*"> >> >> <tr> >> >> <!-- Colorer une ligne sur 2 --> >> >> <xsl:if test="(position() mod 2)=0"> >> >> <xsl:attribute name="bgcolor">green</xsl:attribute> >> >> </xsl:if> >> >> >> >> <!-- Pour chaque colonne --> >> >> <xsl:for-each select="*"> >> >> <xsl:call-template name="colonne"/> >> >> </xsl:for-each> >> >> </tr> >> >> </xsl:for-each> >> >> >> >> </table> >> >> </xsl:template> >> >> >> >> </xsl:stylesheet> >> >> >> >> Exemple XML 1 >> >> >> >> <?xml version="1.0" encoding="UTF-8"?> >> >> <root> >> >> <noeud> >> >> <col1>Val 1</col1> >> >> <col2>Val 2</col2> >> >> <col3>Val 3</col3> >> >> </noeud> >> >> <noeud> >> >> <col1>Val 1</col1> >> >> <col2>Val 2</col2> >> >> <col3>Val 3</col3> >> >> <elements> >> >> <element> >> >> <col4>Val 4</col4> >> >> </element> >> >> <element> >> >> <col4>Val 4</col4> >> >> </element> >> >> </elements> >> >> </noeud> >> >> </root> >> >> >> >> Résultat HTML 1 souhaité >> >> >> -------Val1-----Val2-----Val3 >> -------Val1-----Val2-----Val3-----Val4------ >> -----------------------------------------Val4------ >> >> >> >> Exemple XML 2 >> >> >> >> <?xml version="1.0" encoding="UTF-8"?> >> >> <root> >> >> <noeud1> >> >> <col1>Val1</col1> >> >> <noeud2> >> >> <col2>Val2</col2> >> >> <noeud3> >> >> <col3>Val3</col3> >> >> </noeud3> >> >> <noeud3> >> >> <col3>Val4</col3> >> >> </noeud3> >> >> </noeud2> >> >> </noeud1> >> >> <noeud1> >> >> <col1>Val1</col1> >> >> <noeud2> >> >> <col2>Val2</col2> >> >> <noeud3> >> >> <col3>Val3</col3> >> >> </noeud3> >> >> </noeud2> >> >> </noeud1> >> >> </root> >> >> >> >> Résultat HTML 2 souhaité >> >> >> >> -------Val1-----Val2-----Val3 >> ------------------------------Val4 >> -------Val1-----Val2-----Val3 >> >> >> >> Exemple XML 3 >> >> >> >> <?xml version="1.0" encoding="UTF-8"?> >> >> <root> >> >> <noeud1> >> >> <col1>Val1</col1> >> >> <noeud2> >> >> <noeud3> >> >> <col2>Val2</col2> >> >> <noeud4> >> >> <noeud5> >> >> <col3>Val3</col3> >> >> </noeud5> >> >> <noeud5> >> >> <col3>Val4</col3> >> >> </noeud5> >> >> </noeud4> >> >> </noeud3> >> >> </noeud2> >> >> </noeud1> >> >> <noeud1> >> >> <col1>Val1</col1> >> >> <noeud2> >> >> <noeud3> >> >> <col2>Val2</col2> >> >> <noeud4> >> >> <noeud5> >> >> <col3>Val3</col3> >> >> </noeud5> >> >> </noeud4> >> >> </noeud3> >> >> </noeud2> >> >> </noeud1> >> >> </root> >> >> >> >> Résultat HTML 3 souhaité >> >> >> >> -------Val1-----Val2-----Val3 >> ------------------------------Val4 >> -------Val1-----Val2-----Val3 >> >> >> >> >> >> -- >> Devenez redacteur <XML>fr et contribuez au developpement du >> xml francophone (http://xmlfr.org/infos/redacteurs/) ! >> >> Liste de diffusion "[email protected]" (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 [email protected] >> (mailto:[email protected]?Subject=unsubscribe) >> >> >> >> > > > -- > Devenez redacteur <XML>fr et contribuez au developpement du > xml francophone (http://xmlfr.org/infos/redacteurs/) ! > > Liste de diffusion "[email protected]" (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 [email protected] > (mailto:[email protected]?Subject=unsubscribe) > > > > > -- > Devenez redacteur <XML>fr et contribuez au developpement du > xml francophone (http://xmlfr.org/infos/redacteurs/) ! > > Liste de diffusion "[email protected]" (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 [email protected] > (mailto:[email protected]?Subject=unsubscribe) > > > -- Devenez redacteur <XML>fr et contribuez au developpement du xml francophone (http://xmlfr.org/infos/redacteurs/) ! Liste de diffusion "[email protected]" (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 [email protected] (mailto:[email protected]?Subject=unsubscribe)