Dans ma feuille de calcul XSLT, je dois définir une variable xsl: avec une valeur ou une autre en fonction de la valeur d'un nœud xml. Le code ci-dessous montre ce que j'essaie de faire. Je voudrais définir plusieurs variables de cette façon. Un problème majeur est que pour choisir une valeur de variable basée sur la valeur de nœud de chaque élément, le choix doit être fait dans xsl: foreach, et chaque fois que j'essaie de définir une variable dans xsl: foreach montre un Erreur.Définition dynamique des variables XSLT à l'aide de xsl: choisissez
<xsl:for-each select="WORKS/item">
<xsl:variable name="rate1">
<xsl:choose>
<xsl:when test="rental='new'">
<xsl:value-of select="'.15'" />
</xsl:when>
<xsl:when test="rental='used'">
<xsl:value-of select="'.30'" />
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:variable name="rent1" select="{$rate1}">
La raison pour laquelle je voudrais y arriver en modifiant les valeurs des variables est parce que ces variables sont ensuite utilisées dans une fonction mathématique, qui multiplie la variable d'une valeur de noeud (prix) qui sera différent chaque . Voici comment les variables, une fois définies, seront utilisées. Merci beaucoup.
<div class="rental-period">1-4 Days:</div>
<div class="rental-price"><em>$ <xsl:value-of select='format-number((100*(price * $rent1) div 100), "###.00")'/></em></div>
<div class="rental-period">5-7 Days:</div>
<div class="rental-price"><em>$ <xsl:value-of select='format-number((100*(price * $rent2) div 100), "###.00")'/></em></div>
<div class="rental-period">8-14 Days:</div>
<div class="rental-price"><em>$ <xsl:value-of select='format-number((100*(price * $rent3) div 100), "###.00")'/></em></div>
MISE À JOUR: Ok. J'ai essayé la solution fournie ci-dessous par Dark Falcon, mais elle continue à me donner une erreur "Discordance des balises d'ouverture et de fin". La même erreur qu'avant. Il ne semble pas aimer avoir le xsl: choisir où je l'ai, puisque ces numéros de ligne sont d'où viennent les erreurs. Voici tout le code stylesheet concerné:
<xsl:template name="showPrice">
<xsl:param name="rentalRate"/>
<div class="rental-price"><em>$ <xsl:value-of select='format-number((100*(price * $rentalRate) div 100), "###.00")'/></em></div>
</xsl:template>
<xsl:template match="/">
<xsl:for-each select="WORKS/item">
<div class="rental-info">
<xsl:choose>
<xsl:when test="rental='new'">
<xsl:call-template name="showPrice">
<xsl:with-param name="rentalRate" select="'.15'">
</xsl:call-template>
</xsl:when>
<xsl:when test="rental='used'">
<xsl:call-template name="showPrice">
<xsl:with-param name="rentalRate" select="'.30'">
</xsl:call-template>
</xsl:when>
</xsl:choose>
</div>
</xsl:for-each>
</xsl:template>
J'ai essayé d'utiliser la fonction de modèle d'appel comme l'a suggéré, mais je suis obtenir les mêmes erreurs. J'ai mis à jour ma question ci-dessus. Merci! – Alan
Désolé, with-param doit être une balise vide. En ce moment, il n'a pas de balise de fermeture. –