如何在xslt for-each
中执行继续(不退出for-each
,而是继续 for-each
?
像:
<xsl:for-each select="asd">
<xsl:if test="$test1">
<!--some stuff-->
<xsl:if test="$test1A">
<!--CONTINUE()-->
</xsl:if>
</xsl:if>
<xsl:if test="$test2">
<!--some stuff-->
<!--CONTINUE()-->
</xsl:if>
<!--main stuff-->
</xsl:for-each>
答案 0 :(得分:2)
在这种特定情况下,您似乎希望根据条件执行两个代码。事实上,只有当if
成立时,您才希望从第一个$test1A
继续。
在这种情况下,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
。
答案 1 :(得分:1)
认为你需要xml:choose和xml:when。 xsl:choose元素会在众多可能的替代选项中选择一个。因此,当expression被评估为true时,它会执行该块,然后进入下一个循环。
答案 2 :(得分:0)
在XSL中没有类似于continue
的构造。您必须重新构建代码流以实现相同的效果。
我建议将整个循环体分解成更小的块,以便最小化化合物的数量。
编辑:
以下是使用完整复合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
时,您需要将所有以下代码包装在一个警卫中。
代码更难以作为单个语句阅读,如果代码中有大量代码,那么你最好将它们分解成自己的模板并调用它们。