如何提前退出模板?
就像我想要的那样:
<xsl:template match="asd">
<xsl:if test="$true">EXIT TEMPLATE()</xsl:if>
<!--my main code here-->
</xsl:template>
我现在正在这样做(当然这是有效的)但是无论如何,如果它的变体有效,上面的代码就更加整洁了:
<xsl:template match="asd">
<xsl:choose>
<xsl:when test="$true"></xsl:when>
<xsl:otherwise>
<!--my main code here-->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
答案 0 :(得分:3)
你不能完全按照你的描述去做; XSLT是一种声明性语言,而不是程序性语言,它并没有真正考虑到“程序流程”。但是,为了解释您的示例,您可以这样做:
<xsl:template match="asd[not($true)]">
<!--my main code here-->
</xsl:template>
这方面的缺点是它会阻止你首先输入模板,因此你不能在'if'之前有任何东西。
注意:严格来说,XSLT1.0的规范不应该允许变量处于这样的匹配条件,但是许多XSLT 1.0引擎无论如何都会这样做,这只是一个问题,如果你的条件确实有像这样的变量。但是,XSLT 2.0正式允许它。
答案 1 :(得分:3)
有几种方法可以做到这一点。如果您的条件不包含变量/参数引用(在XSLT 1.0中的匹配模式中不允许),那么只需将其移动到匹配模式中,如下所示:
<xsl:template match="asd[not(<some_boolean_expression>)]">
<!--my main code here-->
</xsl:template>
如果$true
是变量/参数引用,则有条件地应用模板:
<xsl:template match="parent_of_asd">
<xsl:apply-templates select="asd[not($true)]"/>
</xsl:template>
<xsl:template match="asd">
<!--my main code here-->
</xsl:template>
答案 2 :(得分:2)
如果:
apply-templates
方法(@ Iwburk的回答)您仍然可以使用xsl:if
并使用否定逻辑方法:
<xsl:if test="not($true)">
<!--your main code here-->
</xsl:if>