1

在我的工作 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 中,此模板可能具有参数“请求”,而在某些 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' 的参数或它没有参数 'request'

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

4

1 回答 1

1

在 XSLT 2.0 中,尝试将(非隧道)参数传递给未声明该参数的模板是错误的。call-template

这不是 XSLT 1.0 中的错误,在这种情况下,未声明的参数将被简单地忽略。

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

于 2013-11-11T12:44:03.220 回答