В моей электронной таблице XSLT мне нужно определить переменную xsl: с одним или другим значением в зависимости от значения узла xml. Код ниже показывает, что я пытаюсь сделать. Я хотел бы определить несколько переменных таким образом.
Основная проблема заключается в том, что для выбора значения переменной на основе значения узла каждого элемента выбор должен быть сделан в xsl: foreach, и всякий раз, когда я пытаюсь определить переменную в xsl: foreach, он показывает ошибку .
<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}">
Причина, по которой я хотел бы добиться этого путем изменения значений переменных, заключается в том, что эти переменные затем используются в математической функции, которая умножает переменную на значение узла (цену), которое будет различным для каждого. Вот как будут использоваться переменные после их определения. Большое спасибо.
<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>
UPDATE:
Хорошо. Я пробовал решение, предоставленное ниже Dark Falcon, но оно продолжает выдавать ошибку «Несоответствие открывающих и заканчивающих тегов». Та же ошибка, что и раньше. Кажется, не нравится иметь xsl: выберите, где у меня это есть, так как эти номера строк - это то, откуда приходят ошибки. Вот весь соответствующий код таблицы стилей:
<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>