我需要知道每次都会评估变量 $ transformed_date ,或者这个变量和变量的影响一样好(比如C,Java等)。我想确保我不会一遍又一遍地重新评估同样的事情。
<xsl:variable name="transformed_date" select="adjust-dateTime-to-timezone(xs:dateTime(concat(substring ($original_date, 1, 4),'-',substring ($original_date, 5, 2),'-',substring ($original_date, 7, 2),'T',substring ($original_date, 9, 2),':',substring ($original_date, 11, 2),':',substring ($original_date, 13, 2),'-00:00')), xs:dayTimeDuration('-PT5H'))"/>
<xsl:choose>
<xsl:when test="substring (xs:string($transformed_date), 6, 2) = '01'">
<fo:inline>
Jan.
</fo:inline>
</xsl:when>
<xsl:when test="substring (xs:string($transformed_date), 6, 2) = '02'">
<fo:inline>
Feb.
</fo:inline>
</xsl:when>
...
答案 0 :(得分:2)
xslt中的变量只能设置一次。设置后,您无法更改它们。
答案 1 :(得分:2)
您可以假设变量只会被评估一次。但处理器可能选择以不同的方式做事;它可以自由优化。例如,假设,如果变量占用大量空间且处理器内存不足,则可以释放空间并在下次引用时重新评估变量。或者,如果处理器认为评估将非常便宜(例如,如果你说select =“23”),那么处理器可以决定在每次引用时评估它,如果它认为这是最好的策略。