0
<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 样式表时设置一个 xsl:when 条件,即使测试条件失败,我也希望调用其他参数 ABCDE。但是,XSL 编译器抱怨 xsl:if 不能是 xsl:call-template 的子级。

任何建议或任何关于 XSL 什么可以嵌套和什么不能嵌套的综合表格?

4

2 回答 2

2

在 W3C XSLT 规范中,每个元素都有一个语法摘要,说明它可能包含哪些其他元素。例如,xsl:choose可能只包含xsl:whenand xsl:otherwise; xsl:call-template可能只包含xsl:with-param. 有许多元素(例如xsl:element和)包含 XSLT 2.0 所称xsl:attributexsl:if“序列构造函数”(XSLT 1.0 正式称其为“模板”,但没有人使用具有该含义的术语)。序列构造函数是一个指令序列,并且有一个 XSLT 元素列表,这些元素被归类为指令,例如xsl:ifxsl:elementxsl:value-ofxsl:comment等。

所以嵌套规则在规范中有。

于 2012-06-11T20:34:58.880 回答
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>......这无济于事。)

于 2012-06-11T15:40:54.923 回答