Xml 如何在xslt中为每个
如何在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>
,而是为每个
继续
比如:
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>