在我工作的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'
这好吗?我可以知道这可能是错误吗?
答案 0 :(得分:1)
在XSLT 2.0中,an error尝试将带有call-template
的(非隧道)参数传递给不声明该参数的模板。
这不是XSLT 1.0中的错误,在这种情况下,只会忽略未声明的参数。
将未声明的tunnel parameter传递给call-template
是不错误,因此这可能是解决问题的一种方法 - 在两者上使用tunnel="yes"
调用中的with-param
和模板中的param
(如果存在)。但请确保您了解隧道参数的工作原理,并确信它们不会在样式表的其他位置引起其他问题。