From: Jandia, Cyril (Cyril.Jandia@accor-services.com)
Date: 06/05/2003 - 12:42
Bonjour,
> -----Original Message-----
> From: Sandrine Cordonnier [mailto:scordonnier@silicom.fr]
> Sent: mardi 6 mai 2003 12:24
> To: xml-tech@xmlfr.org
> Subject: [xml-tech] Passage d'un nom de template en parametre d'un call-
> template
>
> Bonjour,
>
> [...]par contre je voudrais pouvoir
> changer de methode de formattage de valeur dynamiquement, donc j'ai
> encore modifié "formatTable" de la façon suivante:
> <xsl:template name="formatTable">
> <xsl:param name="valeurs"/>
> <xsl:param name="formatValeur" select="formatDefault"/>
> <table>
> <xsl:for-each select="$valeurs/valeur">
> <tr>
> <td>
> <xsl:call-template name="$formatValeur">
> <xsl:with-param name="x" select="."/>
> </xsl:call-template>
> </td>
> </tr>
> </xsl:for-each>
> </table>
> </xsl:template>
>
> Et là, ça ne fonctionne plus. Donc ma question est en plusieures parties:
Tout d'abord: merci (pour la liste ;-) pour la formulation de vos questions
qui est un exemple de clarté et de progression dans la problématique -- eh!
on aimerait qu'il en soit toujours ainsi... car ce n'est pas négligeable en
ce qui concerne la réutilisabilité des questions/réponses postées puis
archivées sur XMLfr -- mais il est vrai que nous sommes parfois pressés
d'être "débloqués", ce qui peut nuire à la formulation, mais aussi, donc, à
terme, à la résolution du problème ("malentendus" => multiples échanges,
etc)
(Bon, outre ces compliments, on peut quand même essayer de vous aider :-)...
> - Peut-on utiliser des noms de paramètres ("$<nom_de_parametre>") dans
> le parametre "name" de "xsl:call-template" ?
... Hélas, non: d'ailleurs, avec un peu d'expérience, "on" s'accorde
généralement à penser que si c'était le cas, cela rendrait certainement XSLT
*beaucoup* plus puissant mais aussi *beaucoup* plus difficile à
implémenter/optimiser pour ceux qui écrivent les processeurs...
> - Si oui, qu'est-ce qui n'est pas bon dans le code précédent ?
(cette question-là est donc sans objet :-)
> - Si non, y'a t-il un autre moyen de réaliser ce que j'essaie de faire
Voici ce que je proposerais (il n'y a vraiment aucune astuce, et c'est bien
moins "transparent" au moment de l'invocation du formatage :-(
-- a-tester.xsl (NB: j'ai corrigé le "select=..." du <xsl:param
name="formatValeur"...> qui me semble devoir porter une valeur de type
chaîne) :
[...]
<xsl:template name="formatTable">
<xsl:param name="valeurs"/>
<xsl:param name="formatValeur" select="'formatDefault'" />
<table>
<xsl:for-each select="$valeurs/valeur">
<tr>
<td>
<xsl:choose>
<xsl:when test="$formatValeur='formatDefault'">
<xsl:call-template name="formatDefault">
<xsl:with-param name="x" select="."/>
</xsl:call-template>
</xsl:when>
<xsl:when test="$formatValeur='formatSpecial1'">
<xsl:call-template name="'formatSpecial1">
<xsl:with-param name="x" select="."/>
</xsl:call-template>
</xsl:when>
[etc...]
<xsl:otherwise>
<xsl:message terminate="yes">format non
supporté!</xsl:message>
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
[...]
ou, encore :
-- peut-etre-mieux.xsl :
[...]
<xsl:template name="formatTable">
<xsl:param name="valeurs"/>
<xsl:param name="formatValeur" select="'formatDefault'" />
<table>
<xsl:for-each select="$valeurs/valeur">
<tr>
<td>
<xsl:call-template name="apply-format">
<xsl:with-param name="formatValeur" select="$formatValeur" />
</xsl:call-template>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template name="apply-format">
<xsl:param name="formatValeur" />
<xsl:choose>
<xsl:when test="$formatValeur='formatDefault'">
<xsl:call-template name="formatDefault">
<xsl:with-param name="x" select="."/>
</xsl:call-template>
</xsl:when>
<xsl:when test="$formatValeur='formatSpecial1'">
<xsl:call-template name="'formatSpecial1">
<xsl:with-param name="x" select="."/>
</xsl:call-template>
</xsl:when>
[etc...]
<xsl:otherwise>
<xsl:message terminate="yes">format non supporté!</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
[...]
> ci-dessus ?
>
> Merci,
> Sandrine
Cordialement,
Cyril
____________________________________________________________________________
Ce message électronique et tous les fichiers attachés qu'il contient sont
confidentiels et destinés exclusivement à l'usage de la personne à laquelle
ils sont adressés. Si vous avez reçu ce message par erreur, merci de le
retourner à son émetteur. La publication, l'usage, la distribution,
l'impression ou la copie non autorisée de ce message et des attachements
qu'il contient sont strictement interdits.
This e-mail and any files transmitted with it are confidential and intended
solely for the use of the individual to whom it is addressed. If you have
received this email in error please send it back to the person that sent it
to you. Unauthorized publication, use, dissemination, forwarding, printing
or copying of this email and its associated attachments is strictly
prohibited.
____________________________________________________________________________
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (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 xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC
webmaster@xmlfr.org
|