From: PENNEC Vincent (vincent.pennec@cub-brest.fr)
Date: 19/11/2003 - 11:29
Bonjour,
Pourquoi appeler le template manuellement pour chaque option ? Il faut laisser cela au parser XSL
Le XML simplifié
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="xsl_if.xslt" ?>
<root>
<select>
<option value="E">Economique</option>
<option value="B">Business</option>
<option value="F">Première</option>
</select>
<CABIN_OUT>
<CODE>B</CODE>
</CABIN_OUT>
</root>
Le XSL:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<form name="form" action="traitement.php">
<select name="cabine">
<!-- on laisse le parser gérer -->
<xsl:apply-templates select="//option"/>
</select>
</form>
</body>
</html>
</xsl:template>
<xsl:template match="//option">
<option>
<xsl:if test="./@value=//CABIN_OUT/CODE">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
<xsl:attribute name="value"><xsl:value-of select="./@value"/></xsl:attribute>
<xsl:value-of select="."/>
</option>
</xsl:template>
</xsl:stylesheet>
Cordialement,
Vincent PENNEC
> -----Message d'origine-----
> De : Ziad EL KHATIB [mailto:z.elkhatib@vivacances.fr]
> Envoyé : mercredi 19 novembre 2003 11:09
> À : xml-tech@xmlfr.org
> Objet : [xml-tech]
>
>
> Pour finir,
>
> Je ne suis pas sur que ce soit plus performant en fait de
> faire de cette manière la. C'est certainement plus jolie et
> plus propre car on se retrouve avec une seule boucle if a
> écrire. Mais au finale cette boucle est appelée pour chaque
> valeur... n'est ce pas pareil que d'écrire la boucle pour
> chaque valeur (point de vue performance ?) ?
>
>
> -----Message d'origine-----
> De : Ziad EL KHATIB
> Envoyé : mercredi 19 novembre 2003 11:00
> À : xml-tech@xmlfr.org
> Objet : [xml-tech]
>
>
> Ok non c'est bon, j'avais oublié de passer en deuxième param
> la valeur de l'option, c'est pour ça que c'était vide...
>
> Merci Denis ;-)
>
> -----Message d'origine-----
> De : Ziad EL KHATIB
> Envoyé : mercredi 19 novembre 2003 10:25
> À : xml-tech@xmlfr.org
> Objet : [xml-tech]
> ÿso-8859-1?Q?RE_:_[xml-tech]_Réf._:_ÿso-8859-1??ÿso-8859-1?Q?Q
> ?RE_:_[xml-tech]_Réf._:_xsl?ÿso-8859-1?Q?:if_...?X-MimeOLE:_Pr
> oduced_By_Microsoft_Exc?ÿso-8859-1?Q?hange_V6.0.6249.0?X-MimeO
> LE: Produced By Microsoft Exchange V6.0.6249.0
>
>
> Ok alors la j'ai plus d'erreurs, par contre ma liste de
> selection est vide, je n'arrive pas a le mettre en place:
>
> <select>
> <xsl:attribute name="name">CABIN</xsl:attribute>
> <xsl:attribute name="checked"><xsl:value-of
> select="./CABIN_OUT/CODE"/></xsl:attribute>
> <xsl:attribute name="class">content_listbox</xsl:attribute>
> <xsl:call-template name="selection">
> <xsl:with-param name="valeur">E</xsl:with-param>
> </xsl:call-template>
> <xsl:call-template name="selection">
> <xsl:with-param name="valeur">B</xsl:with-param>
> </xsl:call-template>
> <xsl:call-template name="selection">
> <xsl:with-param name="valeur">F</xsl:with-param>
> </xsl:call-template>
> </select>
>
> <xsl:template name="selection">
> <xsl:param name="valeur"/>
> <option>
> <xsl:attribute name="value"><xsl:value-of
> select="$valeur"/></xsl:attribute>
> <xsl:if test="./CABIN_OUT/CODE = '$valeur'" >
> <xsl:attribute
> name="selected">selected</xsl:attribute>
> </xsl:if>
> </option>
> </xsl:template>
>
> -----Message d'origine-----
> De : Denis BAYARD [mailto:denis.bayard@edfgdf.fr]
> Envoyé : mardi 18 novembre 2003 14:45
> À : xml-tech@xmlfr.org
> Objet : [xml-tech] Réf. :
> ÿso-8859-1?Q?RE_:_[xml-tech]_Réf._:_xsl:if_...?X-MimeOLE:
> Produced By Microsoft Exchange V6.0.6249.0
>
> La règle ne doit pas être inclue dans une autre règle, elle
> doit être au
> même niveau (pas de template dans un template).
> En résumant le code :
>
> <xsl:template match="il s'agit ici de votre template">
>
> bla bla bla ... de votre règle
>
> <select>
> bla bla bla ... de ma proposition plus bas
> entre les 2
> balises "select"
> </select>
>
> bla bla bla ... de votre règle
> </xsl:template>
>
> <xsl:template name="selection">
>
> bla bla bla ... de la règle "selection" plus bas
>
> </xsl:template>
>
>
>
> Merci Denis,
>
> J'ai créé le template mais le problème c'est que je fais pleins de
> traitements dans cette page et toute la page est englobée
> dans un template
> déjà. Du coup, j'ai une erreur qui dit que je n'ai pas le
> droit de créer
> un template dans un template. Une idée ?
>
> -----Message d'origine-----
> De : Denis BAYARD [mailto:denis.bayard@edfgdf.fr]
> Envoyé : mardi 18 novembre 2003 12:06
> À : xml-tech@xmlfr.org
> Objet : [xml-tech] Réf. : xsl:if ...
>
> Bonjour
> Il est possible de créer une règle (appelée ici abitrairement
> "selection"), et de l'appeler pour chaque option. Je n'ai pas
> testé le code suivant, mais l'idée y est présente.
>
> <select>
> <xsl:attribute name="name">CABIN</xsl:attribute>
> <xsl:attribute name="checked"><xsl:value-of
> select="./CABIN_OUT/CODE"/></xsl:attribute>
> <xsl:attribute name="class">content_listbox</xsl:attribute>
>
> <xsl:call-template name="selection">
> <xsl:with-param name="valeur">E</xsl:with-param>
> </xsl:call-template> <xsl:call-template name="selection">
> <xsl:with-param name="valeur">B</xsl:with-param>
> </xsl:call-template> <xsl:call-template name="selection">
> <xsl:with-param name="valeur">F</xsl:with-param>
> </xsl:call-template> </select>
>
> <!-- Et voici la règle -->
> <xsl:template name="selection">
> <xsl:param name="valeur"/>
>
> <option>
> <xsl:attribute name="value"><xsl:value-of
> select="$valeur"/></xsl:attribute>
>
> <xsl:if test="./CABIN_OUT/CODE = '$valeur'" >
> <xsl:attribute
> name="selected">selected</xsl:attribute>
> </xsl:if>
> </option>
>
> </xsl:template>
>
>
>
>
> Bonjour tout le monde,
> Dans mon xsl, j'ai pas mal de listes de selection (cf exemple
> ci-dessous). Et pour chaque option du select, je fais un test
> if et je le mets a selected=selected. Ce qui fait que je peux
> arriver a avoir pas mal de boucles if(3 dans mon exemples
> deja...). Il y a surement un moyen d'eviter ca et d'optimiser
> le code. Je connais xsl:choose et xsl:when, est ce que c'est
> mieux ? y a-t-il autre chose ?
>
> Merci.
> <select>
> <xsl:attribute name="name">CABIN</xsl:attribute>
> <xsl:attribute name="checked"><xsl:value-of
> select="./CABIN_OUT/CODE"/></xsl:attribute>
> <xsl:attribute name="class">content_listbox</xsl:attribute>
> <option>
> <xsl:attribute name="value">E</xsl:attribute>
> <xsl:if test="./CABIN_OUT/CODE = 'E'" >
> <xsl:attribute name="selected">selected</xsl:attribute>
> </xsl:if>
> Economique
> </option>
> <option>
> <xsl:attribute name="value">B</xsl:attribute>
> <xsl:if test="./CABIN_OUT/CODE = 'B'" >
> <xsl:attribute name="selected">selected</xsl:attribute>
> </xsl:if>
> Business
> </option>
> <option>
> <xsl:attribute name="value">F</xsl:attribute>
> <xsl:if test="./CABIN_OUT/CODE = 'F'" >
> <xsl:attribute name="SELECTED"/>
> </xsl:if>
> Première
> </option>
> </select>
>
>
--
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
|