我正在设置一个变量,如下所示。
<xsl:variable name="FoundFloating"> <xsl:value-of select="'no'" />
</xsl:variable>
现在我正在进行一些处理,如下所示。
<xsl:if test="$abcid=$def_id">
<xsl:for-each "$abcd">
<xsl:variable name="abcRate"> <xsl:value-of select="./def_Period/"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="$abcdf !=$abcRate">
<xsl:variable name="$FoundFloating"> <xsl:value-of select="yes" />
</xsl:variable>
</xsl:when>
</xsl:choose>
</xsl:for-each>
现在在此XSL之后,我正在评估如下所示。但是我的查询是,foundfloating
变量是否可以访问,因为FOR循环已经结束。
<xsl:choose>
<xsl:when test="$FoundFloating='yes'"> <xsl:value-of select="'AAA'" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'BBBA'" />
</xsl:otherwise>
</xsl:choose>
现在,在此XSL之后,我正在评估如下所示。但是我的查询是foundfloating
变量是否可以访问,因为FOR循环已经结束。请为此提供建议,因为我已经更新了帖子
要注意的第一件事是变量在XSLT中是不可变的。这意味着一旦声明,它们就无法更改。XSLT示例中实际发生的事情是您正在宣布一个全新的变量,并以相同的名称声明。
undfloating 您在for循环中声明的变量将无法在for循环外访问,因为它仅在范围内是局部的。实际上,它只能在XSL内部访问:当语句定义时。它与您定义的全局一个变量不同,并且仅存在于循环中。
。您真的不需要这里的循环。您可以将条件组合在 XSL中:for-east 以及 XSL中的条件: ns 中的单个变量声明。
<xsl:if test="$abcid=$def_id">
<xsl:variable name="FoundFloating">
<xsl:if test="$abcd[def_Period != $abcdf]">yes</xsl:if>
</xsl:variable>
<xsl:choose>
<xsl:when test="$FoundFloating='yes'">
(这替换 XSL:for-east 完全)
实际上,可以通过简单地将设置为节点本身(如果有一个),而不是"是"
来简单地简化这一点。<xsl:if test="$abcid=$def_id">
<xsl:variable name="FoundFloating" select="$abcd[def_Period != $abcdf]" />
<xsl:choose>
<xsl:when test="$FoundFloating">
这起作用是因为测试的本质是某个节点是否存在与条件相匹配。而不是设置变量是否存在为"是"或"否"是否存在,而是将变量设置为节点本身。然后,如果存在,则语句<xsl:when test="$FoundFloating">
返回true,但如果不返回。
因此,您不需要 XSL:for-east 循环,并且您只需要声明 fundfloating variable一次。