Dentro de mi hoja de cálculo XSLT, necesito definir una variable xsl: con un valor u otro dependiendo del valor de un nodo xml. El código justo debajo muestra lo que intento hacer. Me gustaría definir múltiples variables de esta manera.Definir variables XSLT dinámicamente usando xsl: elegir
Un problema importante es que para elegir un valor variable basado en el valor del nodo de cada elemento, la elección debe hacerse dentro de xsl: foreach, y cada vez que intento definir una variable dentro de xsl: foreach, se muestra error.
<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 razón por la que me gustaría lograr esto a través de cambiar los valores de las variables se debe a que estas variables se utilizan en una función matemática, lo que multiplica la variable por un valor de nodo (precio) que será diferente con cada . Aquí es cómo se usarán las variables, una vez definidas. Muchas gracias
<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>
ACTUALIZACIÓN: Ok. He intentado la solución provista a continuación por Dark Falcon, pero me sigue dando un error "No coinciden las etiquetas de apertura y final". El mismo error que antes. No parece gustarle tener xsl: elige dónde lo tengo, ya que esos números de línea son de donde provienen los errores. Aquí está todo el código de estilo relevante:
<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>
He intentado utilizar la función de llamada en plantillas como se sugiere, pero estoy consiguiendo los mismos errores. He actualizado mi pregunta anterior. ¡Gracias! – Alan
Lo sentimos, con-param tiene que ser una etiqueta vacía. En este momento no tiene etiqueta de cierre. –