1

我的实时 XSLT 文件有问题。基于此,我在这里提出我的问题。我有 3 个 xslt 文件,例如1.xsl,2.xslmaster.xsl. 这master.xsl是导入1.xsl2.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 文件中声明相同的变量,因为它会花费更多时间并且不会保持一致。

谁能给我一个想法来克服这个问题?

4

1 回答 1

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.

于 2013-09-30T11:10:05.363 回答