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 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(*) &gt;= 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)
>
>
>