Re: XSL unique pour XML différent

COUTHURES Alain <[email protected]> Fri, 06 Apr 2007 14:49:17 +0200
Newsgroups gmane.text.xml.french.tech
Message-ID <[email protected]>
Voici, à essayer, une feuille de style qui gère avec ou sans 
regroupement (elle est peut-être simplifiable...) :
 <xsl:stylesheet version="1.0" txs:name="aplati">
  <xsl:template match="/">
   <html>
    <body>
     <xsl:call-template name="aplati"/>
    </body>
   </html>
  </xsl:template>
  <xsl:template name="aplati">
   <xsl:choose>
    <xsl:when test="count(*[count(*)!=0])!=0 and count(*[count(*)=0])=0">
     <!-- Noeud de regroupement -->
     <xsl:for-each select="*">
      <xsl:call-template name="aplati"/>
     </xsl:for-each>
    </xsl:when>
    <xsl:otherwise>
     <table>
      <tr>
       <xsl:call-template name="groupe"/>
      </tr>
     </table>
    </xsl:otherwise>
   </xsl:choose>
  </xsl:template>
  <xsl:template name="groupe">
   <xsl:for-each select="*[count(*)=0]">
    <!-- Noeud textuel -->
    <td>
     <xsl:value-of select="."/>
    </td>
   </xsl:for-each>
   <xsl:choose>
    <xsl:when test="count(*[count(*)!=0]) &lt; 2">
     <!-- Noeud non textuel tout seul -->
     <xsl:for-each select="*[count(*)!=0]">
      <td>
       <xsl:call-template name="aplati"/>
      </td>
     </xsl:for-each>
    </xsl:when>
    <xsl:otherwise>
     <!-- Noeuds non textuel sans regroupement -->
     <td>
      <table>
       <xsl:for-each select="*[count(*)!=0]">
        <tr>
         <xsl:call-template name="groupe"/>
        </tr>
       </xsl:for-each>
      </table>
     </td>
    </xsl:otherwise>
   </xsl:choose>
  </xsl:template>
 </xsl:stylesheet>

(testé avec TXS (http://sourceforge.net/projects/txs))

Merci de me dire ce que cela donne sur vos autres exemples.

Bien cordialement,

Alain COUTHURES
<agenceXML>
http://www.agenceXML.com

Thibaut Gabelle a écrit :
>> Pour résoudre ce problème de noeud de regroupement, il serait possible 
>> de faire une première transformation pour les rajouter là où ils manquent.
>>     
>
> Effectivement je crois qu'il va falloir que je procède comme ça.
>
>   
>> Plutôt qu'une transformation à part entière, le résultat pourrait être 
>> stocké dans une variable puis relu moyennant une conversion "node-set", 
>> malheureusement dépendante du parseur que vous utilisez... Lequel est-ce ?
>>     
>
> Je vois pas trop où vous voulez en venir avec le parseur.
> J'explique mon environnement : Le fichier XML est construit par des
> composants Java (sans aucun parser particulier, simple écriture dans un
> StringBuffer...), à ce fichier XML j'applique ma transformation XSLT à
> l'aide du transformer Xalan.
> Là j'obtiens ma page résultat HTML, qui selon des actions de l'utilisateur
> (telles que des tris sur de colonnes ou une navigation de page en page)
> rappellera la transformation XSLT avec des paramètres différents.
>
>
> COUTHURES Alain a écrit :
>   
>> 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
>>
>> -
>>   
>> 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)
>
>
>