Re: XSL unique pour XML =?windows-1258?Q?diff=E9rent?=
"Thibaut Gabelle" <[email protected]> Fri, 6 Apr 2007 12:04:59 +0200
| Newsgroups | gmane.text.xml.french.tech |
|---|---|
| Message-ID | <[email protected]> |
Effectivement je me suis rendu compte de cette non homogénéité. L'embêtant c'est que j'ai la main sur la génération du XML, à savoir éventuellement rajouter des attributs pour distinguer les nœuds listes, mais pour modifier sa structure je ne pense pas pouvoir y arriver. Pour vous la meilleure solution serait d'avoir un nœud de regroupement je suppose ? -----Message d'origine----- De : [email protected] [mailto:[email protected]] De la part de COUTHURES Alain Envoyé : vendredi 6 avril 2007 11:48 À : [email protected] Objet : [xml-tech] Re: XSL unique pour XML différent J'ai une question complémentaire : Je m'aperçois que le document XML n'est pas homogène dans sa logique... Parfois on a un noeud du style : <A> <B>val1</B> <C> <D> <E>val2</E> </D> <D> <E>val3</E> </D> </C> </A> et d'autres fois, on ne met pas le noeud de regroupement C : <A> <B>val1</B> <D> <E>val2</E> </D> <D> <E>val3</E> </D> </A> Faire un algo pour un document avec regroupement systématique (ou l'inverse) serait plus simple que de faire un algo combinant ces deux possibilités... A chaque fois que je construis moi-même un document XML, je me pose toujours la question de mettre ou non un noeud de regroupement mais ne serait-il pas possible pour vous de choisir une seule logique, une fois pour toute, dans un même document ? Alain COUTHURES <agenceXML> http://www.agencexml.com Thibaut Gabelle a écrit : > 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) > > > > > -- > 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)