xsl变量值修改

时间:2015-07-03 11:52:16

标签: xml xslt

<xsl:variable name="sessionvalue">+xyz+</xsl:variable>
        <xsl:variable name="controller">1</xsl:variable>
        <xsl:for-each select="/Properties/Data/Datum[@Name='My DCR']/DCR/tip_of_the_week/targeted_content">
            <xsl:variable name="dcrvalue"><xsl:value-of select="targeted_audiences"/></xsl:variable>
            <span>controller: <xsl:value-of select="$controller"/></span>
            <xsl:if test="$controller='1'">
            <xsl:if test="contains($dcrvalue,$sessionvalue)">
            <xsl:variable name="controller">0</xsl:variable>
                <p><xsl:value-of select="tip_header"/></p>
            </xsl:if>
            </xsl:if>
         </xsl:for-each>

我需要在一个成功包含测试的每个循环中出来。我看到xslt中存在中断,我们也不能对变量赋值。有没有人对此有任何建议?

1 个答案:

答案 0 :(得分:0)

  

我需要在一个成功包含的每个循环中出来   测试

没有。您需要做的是测试至少有一个节点是否满足条件。不&#34;循环&#34;这是必要的。

我把&#34;循环&#34;在引号中,因为xsl:for-each不是循环。

我无法阅读您的代码,但总的来说它看起来像这样:

<xsl:choose>
    <xsl:when test="some/nodes[contains(sub-node, 'search-string')]">
        <!-- do something -->
    </xsl:when>
    <xsl:otherwise>
        <!-- do something else -->
    </xsl:otherwise>
</xsl:choose> 

修改

  

可能会发生多个匹配,但我需要继续工作   第一场比赛。

如果这是你的目标,那么直接选择第一场比赛,例如:

<xsl:for-each select="some/nodes[contains(sub-node, 'search-string')][1]">
    <!-- work on this node -->
</xsl:for-each>

再次,没有&#34;循环&#34;这是必要的。