All'interno del foglio di calcolo XSLT, è necessario definire una variabile xsl: con un valore o un altro in base al valore di un nodo xml. Il codice appena sotto mostra quello che sto cercando di fare. Mi piacerebbe definire più variabili in questo modo.Definire dinamicamente le variabili XSLT utilizzando xsl: scegliere
Una questione importante è che per scegliere un valore variabile in base al valore del nodo di ogni elemento, la scelta deve avvenire entro xsl: foreach, e ogni volta che provo definire una variabile all'interno xsl: foreach mostra un errore.
<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}">
Il motivo desidero realizzare questo through cambiando i valori delle variabili è perché tali variabili vengono poi utilizzati in una funzione matematica, che moltiplica la variabile da un valore di nodo (prezzo) che sarà diverso per ogni . Ecco come verranno utilizzate le variabili, una volta definite. Grazie mille.
<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. Ho provato la soluzione fornita di seguito da Dark Falcon, ma continua a darmi un errore "Apertura e chiusura dei tag non corrispondenti". Lo stesso errore di prima. Non sembra piacere avere xsl: scegli dove trovarlo, dato che quei numeri di riga sono da dove provengono gli errori. Qui è tutto il codice foglio di stile in questione:
<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>
Ho provato ad utilizzare la funzione di call-modello come suggerito, ma sto ottenendo gli stessi errori. Ho aggiornato la mia domanda sopra. Grazie! – Alan
Siamo spiacenti, con-param deve essere un tag vuoto. Al momento non ha tag di chiusura. –