Re: XSL unique pour XML =?windows-1258?Q?diff=E9rent?=
COUTHURES Alain <[email protected]> Fri, 06 Apr 2007 12:16:10 +0200
| Newsgroups | gmane.text.xml.french.tech |
|---|---|
| Message-ID | <[email protected]> |
Oui, je pense qu'un noeud de regroupement serait mieux, et c'est déjà le cas pour la racine elle-même dans l'exemple fourni ! Alain COUTHURES <agenceXML> http://www.agenceXML.com Thibaut Gabelle a écrit : > 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 nuds listes, mais > pour modifier sa structure je ne pense pas pouvoir y arriver. > Pour vous la meilleure solution serait d'avoir un nud 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) > > > > > -- > 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) > > >