XSLT在有param时调用模板而没有

时间:2013-11-11 12:30:39

标签: xslt

在我工作的xslt中,我在一些文件中有如下情况

<xsl:template name="content">
 <xsl:param name="request" as="node()" select="doc('')"/>
    <div class="main-group">
      <div class="main container" id="main_content">

        something goes here..

      </div>
    </div>
  </xsl:template> 

在某些xslt中,此模板可能包含参数'request',而在某些xslt中,这可能没有,我的意思是,如下所示。

<xsl:template name="content">
     <!--param missing here-->
        <div class="main-group">
          <div class="main container" id="main_content">

            something goes here..

          </div>
        </div>
</xsl:template>

所以,在这两种情况下,我都需要调用这个模板[name =“content”]而不会有麻烦。

我使用如下:

 <xsl:apply-templates select="content">
     <xsl:with-param name="request" select="$request"/>
 </xsl:apply-templates>
 <xsl:call-template name="content"/>

我的目的是调用名为'content'的模板而不会遇到麻烦,即使模板确实有名为'request'的param或者没有param'request'

这好吗?我可以知道这可能是错误吗?

1 个答案:

答案 0 :(得分:1)

在XSLT 2.0中,an error尝试将带有call-template的(非隧道)参数传递给不声明该参数的模板。

这不是XSLT 1.0中的错误,在这种情况下,只会忽略未声明的参数。

将未声明的tunnel parameter传递给call-template错误,因此这可能是解决问题的一种方法 - 在两者上使用tunnel="yes"调用中的with-param和模板中的param(如果存在)。但请确保您了解隧道参数的工作原理,并确信它们不会在样式表的其他位置引起其他问题。