In meinem XSLT-Arbeitsblatt muss ich eine xsl:Variable mit dem einen oder anderen Wert definieren, der vom Wert eines XML-Knotens abhängt. Der unten stehende Code zeigt, was ich zu tun versuche. Ich würde gerne mehrere Variablen auf diese Weise definieren.
Ein großes Problem besteht darin, dass die Auswahl eines Variablenwerts auf der Grundlage des Knotenwerts jedes Elements innerhalb von xsl:foreach erfolgen muss, und immer wenn ich versuche, eine Variable innerhalb von xsl:foreach zu definieren, wird ein Fehler angezeigt.
<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, warum ich dies durch das Ändern der Variablenwerte erreichen möchte, ist, dass diese Variablen dann in einer mathematischen Funktion verwendet werden, die die Variable mit einem Knotenwert (Preis) multipliziert, der bei jedem anders sein wird. Hier ist, wie die Variablen, sobald sie definiert sind, verwendet werden. Vielen Dank für Ihre Hilfe.
<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 stehende Lösung von Dark Falcon ausprobiert, aber ich erhalte immer wieder die Fehlermeldung "Opening and Ending Tags mismatch". Derselbe Fehler wie zuvor. Es scheint nicht zu mögen, dass die xsl:choose, wo ich es haben, da diese Zeilennummern sind, wo die Fehler kommen aus. Hier ist der gesamte relevante Stylesheet-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>