Xml 如何在xslt中为每个

Xml 如何在xslt中为每个,xml,xslt,Xml,Xslt,如何在xslt中为每个执行继续(不是为每个退出,而是为每个继续 比如: XSL中没有类似于continue的构造。您必须重新构造代码流以达到相同的效果 我建议将整个循环体分解成更小的块,以最小化复合if的数量 编辑: 以下是使用完全复合ifs时的情况: <xsl:for-each select="asd"> <xsl:if test="$test1"> <!--some stuff (1)--> </xsl:if>

如何在xslt中为每个执行继续(不是为每个退出
,而是为每个
继续

比如:


XSL中没有类似于
continue
的构造。您必须重新构造代码流以达到相同的效果

我建议将整个循环体分解成更小的块,以最小化复合if的数量

编辑:

以下是使用完全复合ifs时的情况:

<xsl:for-each select="asd">
    <xsl:if test="$test1">
        <!--some stuff (1)-->
    </xsl:if>
    <xsl:if test="not($test1 and $test1A)">
        <xsl:choose>
            <xsl:when test="$test2">
                <!--some stuff (2)-->            
            </xsl:when>
            <xsl:otherwise>
                <!--main stuff (3)-->    
            </xsl:otherwise>
        </xsl:choose>
    </xsl:if>
</xsl:for-each>

每次需要
continue
时,都需要将下面的所有代码包装在一个保护中


代码很难作为一个单独的语句来阅读,如果在这些if中有大量的代码,你最好将它们分解成自己的模板并调用它们。

认为你需要xml:choose和xml:when.element在许多可能的备选方案中选择一个如果将aluate设置为true,它将执行该块,然后进入下一个循环。

在这种特定情况下,您可能希望根据一个条件执行两个代码。事实上,只有当
$test1A
为true时,您才希望从第一个
继续

在这种情况下,
xsl:choose
对您没有帮助。您必须使用纯逻辑并模拟所需的行为:

<xsl:for-each select="asd">
    <xsl:if test="$test1">
        <!--some stuff-->
        <xsl:if test="$test1A">
            <!--CONTINUE()-->
        </xsl:if>
    </xsl:if>
    <xsl:if test="$test2 and not($test1A)">
        <!--some stuff-->
        <!--CONTINUE()-->
    </xsl:if>
    <!--main stuff-->
</xsl:for-each>


使用上述条件,仅当第一个分支中嵌套的
if
为false时,才会执行第二个
if

如果OP的示例输入正确反映了问题,
xsl:choose
对他毫无帮助。请参阅我的答案。我认为这没有必要。请参阅我的答案。
<xsl:for-each select="asd">
    <xsl:if test="$test1">
        <!--some stuff-->
        <xsl:if test="$test1A">
            <!--CONTINUE()-->
        </xsl:if>
    </xsl:if>
    <xsl:if test="$test2 and not($test1A)">
        <!--some stuff-->
        <!--CONTINUE()-->
    </xsl:if>
    <!--main stuff-->
</xsl:for-each>