0

我需要知道变量$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>
...
4

2 回答 2

2

xslt 中的变量只能设置一次。一旦设置,您将无法更改它们。

于 2012-11-28T21:23:44.070 回答
2

您可能会假设该变量只会被评估一次。但是处理器可能会选择以不同的方式做事;可以免费优化。例如,假设变量占用大量空间而处理器内存不足,它可能会释放空间并在下次引用变量时重新评估变量。或者,如果处理器认为评估将非常便宜(例如,如果您说 select="23"),那么处理器可以决定在每次引用它时评估它,如果它认为这是最好的策略。

于 2012-11-29T00:16:41.670 回答