我的实时XSLT文件存在问题。基于此,我在这里提出我的问题。
我有3个xslt文件,例如1.xsl
,2.xsl
和master.xsl
。此master.xsl
已导入1.xsl
和2.xsl
在master.xsl上,我使用下面的代码
<xsl:call-template name="content">
<xsl:with-param name="request" select="$request"/>
<xsl:call-template>
同样明智的,1.xsl
,
<xsl:template name="content">
<xsl:param name="request" as="node()"/>
....
</xsl:template>
在2.xsl
<xsl:template name="content">
....
</xsl:template>
当我执行此2.xsl
时,我收到以下错误:
XTSE0680: Parameter request is not declared in the called template
实际上,只有在执行1.xsl
时才需要请求变量。另外,我没有在2.xsl
上的模板上声明虚拟变量。像这样,我实时有很多xslt文件。所以,我无法在许多xslt文件中声明相同的变量,因为它会有更多的时间而且它不会保持一致。
有人能给我一个克服这个想法的想法吗?
答案 0 :(得分:2)
XSLT 2.0的规则明确地在http://www.w3.org/TR/xslt20/#err-XTSE0680中说:“在xsl:call-template的情况下,将名为x的非隧道参数传递给没有的模板是一个静态错误一个名为x的模板参数,除非为xsl:call-template指令启用了向后兼容的行为。“。
因此,如果您想使用代码
,请使用XSLT 2.0<xsl:call-template name="content">
<xsl:with-param name="request" select="$request"/>
<xsl:call-template>
然后您需要确保所有被调用的模板content
都声明了该参数request
。
我认为apply-templates
的规则不同,因此您可以检查是否不能简单地使用match
属性编写模板并使用apply-templates
。