访问XSL中的for循环之外的变量



我正在设置一个变量,如下所示。

<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一次。

相关内容

  • 没有找到相关文章

最新更新