Re: XSL unique pour XML différent
COUTHURES Alain <[email protected]> Fri, 06 Apr 2007 09:24:54 +0200
| Newsgroups | gmane.text.xml.french.tech |
|---|---|
| Message-ID | <[email protected]> |
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) > > >