Re: template dans un template ...

Stephane Bonhomme <[email protected]> Tue, 05 Jun 2007 18:30:25 +0200
Newsgroups gmane.text.xml.french.tech
Organization exselt services
Message-ID <1181061025.13793.57.camel@citrouille>
il suffit de rajouter le cas (avec un xsl:when vide= dans votre
xsl:choose, afin que dans la condition que vous exprimez, le otherwise
ne s'applique pas, par exemple :

        <xsl:choose>
            <xsl:when test="name(..)='Chapitre'">...  </xsl:when>
            <xsl:when test="name(..)='SousChapitre'">...  </xsl:when>

          <xsl:when test="count(.//BlocTexte/node())=0"/>

            <xsl:otherwise>
                <prea>
                    <xsl:apply-templates/>
                </prea>
            </xsl:otherwise>
        </xsl:choose>


Le mardi 05 juin 2007 à 15:59 +0200, Ziad EL KHATIB a écrit :
> bonjour,
> j'ai un soucis avec ma xslt. c'est un peu compliqué à expliquer donc je vais
> commencer par un exemple:
> 
> --------------------------------------------------------------------------------
> EXEMPLE 1 : exemple ou ca fonctionne correctement
> XML DEPART
>     <contenuGamme>
>         <Titre>
>             ............
>         </Titre>
>         <Preambule>
>             <Elements>
>                 <Paragraphe>
>                     <BlocTexte></BlocTexte>
>                 </Paragraphe>
>                 <Remarque type="imp">
>                     <BlocTexte>
>                         <Phrase code="N007756">
>                             <texte>respecter les consignes de sécurité et de
> propreté</texte>
>                         </Phrase>
>                     </BlocTexte>
>                 </Remarque>
>                 <Paragraphe>
>                     <BlocTexte/>
>                 </Paragraphe>
>                 <Remarque type="nota">
>                     <BlocTexte>
>                         <Phrase code="O080091">
>                             <texte>après coupure du contact</texte>
>                         </Phrase>
>                         <TexteLibre> : </TexteLibre>
>                         <Phrase code="N035779">
>                             <texte>attendre *1 minutes avant de débrancher
> la batterie pour garantir la mémorisation des apprentissages des différents
> calculateurs</texte>
>                             <param>15</param>
>                         </Phrase>
>                     </BlocTexte>
>                 </Remarque>
>                 <Paragraphe>
>                     <BlocTexte/>
>                 </Paragraphe>
>                 <Remarque type="imp">
>                     <BlocTexte>
>                         <Phrase code="N036848">
>                             <texte>attendre au minimum une heure avant toute
> intervention sur la ligne d'échappement</texte>
>                         </Phrase>
>                     </BlocTexte>
>                 </Remarque>
>             </Elements>
>         </Preambule>
> 
> XML OBTENU ET VOULU
>     <contenuGamme>
>         <titre>
>             ............
>          </titre>
>         <prea>
>             <rem type="imp"><phr code="N007756"/>
>             </rem>
>             <rem type="nota"><phr code="O080091"/><txtlibre> :
> </txtlibre><phr code="N035779">
>                     <param type="VALEUR">15</param>
>                 </phr>
>             </rem>
>             <rem type="imp"><phr code="N036848"/>
>             </rem>
>         </prea>
> 
> 
> --------------------------------------------------------------------------------
> EXEMPLE 2 : exemple qui ne marche pas
> XML DEPART
>     <contenuGamme>
>         <Titre>
>              .............................
>         </Titre>
>         <Preambule>
>             <Elements>
>                 <Paragraphe>
>                     <BlocTexte></BlocTexte>
>                 </Paragraphe>
>             </Elements>
>         </Preambule>
>         <Chapitre>
>             <Titre>
>              .....................
> 
> XML OBTENU
>     <contenuGamme>
>         <titre>
>         </titre>
>         <prea/>
>         <chap>
> 
> XML VOULU
>     <contenuGamme>
>         <titre>
>             ............
>          </titre>
>          <chapitre>
>             <titre>
>                 ...........
> 
> 
> Voici ma xslt:
>     <xsl:template match="Preambule">
>         <xsl:choose>
>             <xsl:when test="name(..)='Chapitre'">
>                 <sprea>
>                     <txtn2>
>                         <xsl:apply-templates/>
>                     </txtn2>
>                 </sprea>
>             </xsl:when>
>             <xsl:when test="name(..)='SousChapitre'">
>                 <ssprea>
>                     <txtn3>
>                         <xsl:apply-templates/>
>                     </txtn3>
>                 </ssprea>
>             </xsl:when>
>             <xsl:otherwise>
>                 <prea>
>                     <xsl:apply-templates/>
>                 </prea>
>             </xsl:otherwise>
>         </xsl:choose>
>     </xsl:template>
>     <xsl:template match="BlocTexte">
>             <xsl:apply-templates select="node()"/>
>     </xsl:template>
> 
> En gros, ma xslt marche parfaitement sauf dans le cas ou j'ai dans mon
> preambule qu'un BlocTexte vide et rien d'autre, dans ce cas je ne veux pas
> avoir un <prea/> qui s'affiche, je ne veux rien.
> 
> Je ne pense pas avoir été très clair mais merci pour votre aide en tous cas
> :-)
> 
> --
> 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)
> 
-- 
   Stéphane Bonhomme           --           Exselt Services

Formations, Conseil et Réalisations en Ingénierie Documentaire,
            Technologies Web et Logiciels Libres
     [email protected]   -   http://www.exselt.com
        04 57 39 30 78        /      06 88 57 27 08