Innerhalb meiner XSLT-Tabelle muss ich eine xsl: -Variable mit dem einen oder anderen Wert definieren, abhängig vom Wert eines xml-Knotens. Der Code unten zeigt, was ich versuche zu tun. Ich möchte auf diese Weise mehrere Variablen definieren.XSLT-Variablen dynamisch mit xsl definieren: Wählen Sie
Ein Hauptproblem ist, dass, um einen Variablenwert basierend auf dem Knotenwert jedes Elements zu wählen, die Auswahl innerhalb von xsl: foreach erfolgen muss, und wenn ich versuche, eine Variable innerhalb von xsl zu definieren 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}">
Der Grund Ich mag würde dies erreichen durch die Variablenwert zu ändern, da diese Variablen werden dann in einer mathematischen Funktion, die die Variable durch einen Knotenwert (Preis) multipliziert, die mit jedem anders sein . Hier werden die einmal definierten Variablen verwendet. Vielen Dank.
<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: Ok. Ich habe die unten von Dark Falcon angebotene Lösung ausprobiert, aber es gibt mir immer wieder die Fehlermeldung "Öffnen und Beenden von Tags stimmt nicht überein". Derselbe Fehler wie zuvor. Es scheint nicht so zu sein, als ob xsl: wähle, wo ich es habe, da diese Zeilen die Fehlerquellen sind. Hier alle relevanten Sheet-Code:
<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>
Ich habe versucht, den Anruf-Template-Funktion, wie vorgeschlagen, aber ich die gleichen Fehler zu bekommen. Ich habe meine Frage oben aktualisiert. Vielen Dank! – Alan
Entschuldigung, With-Param muss ein leeres Tag sein. Im Moment hat es kein schließendes Tag. –