Re: XSL unique pour XML différent

Marc <[email protected]> Thu, 05 Apr 2007 14:35:37 +0200
Newsgroups gmane.text.xml.french.tech
Message-ID <[email protected]>
Bonjour,
Quand j'attaque ce genre de problème, j'essaie d'exprimer avec des 
règles en français la transformation que je veux.
Je pense qu'en utilisant des paramètres qui stockeront les parents tu 
devrais réussir à faire cela sans utiliser de for-each.
Marc

Thibaut Gabelle wrote:
> 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)
>
>