嵌套xsl:在xsl:call-template中

时间:2012-06-11 15:37:42

标签: xslt nested

<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!

2 个答案:

答案 0 :(得分:2)

在W3C XSLT规范中,每个元素都有一个语法摘要,说明它可能包含的其他元素。例如,xsl:choose可能只包含xsl:whenxsl:otherwise; xsl:call-template只能包含xsl:with-param。有许多元素(例如xsl:elementxsl:attributexsl:if)包含XSLT 2.0称为“序列构造函数”的内容(XSLT 1.0正式称其为“模板”,但没有 - 一个人使用具有该含义的术语)。序列构造函数是一系列指令,并且有一个被分类为指令的XSLT元素列表,例如xsl:ifxsl:elementxsl:value-ofxsl: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> ...这对您没有帮助。)