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