<xsl:call-template name="myfield">
<xsl:with-param name=A/>
<xsl:with-param name=B/>
<xsl:with-param name=C/>
<xsl:if test="not(starts-with(specialTest))">
<xsl:with-param name="TEST" select="'someFunction'"/>
</xsl:when>
<xsl:with-param name="D"/>
<xsl:with-param name="E"/>
</xsl:call-template>
大家好,我试图把xsl:when条件当我生成这个xsl样式表时,即使测试条件失败也要调用其他参数ABCDE。但是,XSL编译器抱怨xsl:if不能是xsl:call-template的子代。
任何建议,或任何可以嵌套的内容以及无法嵌套的XSL的综合表格? Muchos Gracias!
答案 0 :(得分:2)
在W3C XSLT规范中,每个元素都有一个语法摘要,说明它可能包含的其他元素。例如,xsl:choose
可能只包含xsl:when
和xsl:otherwise
; xsl:call-template
只能包含xsl:with-param
。有许多元素(例如xsl:element
和xsl:attribute
和xsl:if
)包含XSLT 2.0称为“序列构造函数”的内容(XSLT 1.0正式称其为“模板”,但没有 - 一个人使用具有该含义的术语)。序列构造函数是一系列指令,并且有一个被分类为指令的XSLT元素列表,例如xsl:if
,xsl:element
,xsl:value-of
,xsl:comment
,等
因此规范中存在嵌套规则。
答案 1 :(得分:1)
<xsl:when>
只能在<xsl:choose>
元素中使用 - 但是,<xsl:call-template>
中唯一可用的元素是<xsl:with-param>
。
试试这个(未经测试)......
<xsl:call-template name="myfield">
<xsl:with-param name=A/>
<xsl:with-param name=B/>
<xsl:with-param name=C/>
<xsl:with-param name="TEST">
<xsl:if test="not(starts-with(specialTest))">your value</xsl:if>
</xsl:with-param>
<xsl:with-param name="D"/>
<xsl:with-param name="E"/>
</xsl:call-template>
(您的示例中还有一个前导<xsl:if>
,但结尾为<\xsl:when>
...这对您没有帮助。)