带有包含的XSLT重复模板

top*_*r-j 4 xslt visual-studio-2008

我遇到了包含xslt模板的问题.

我有一个包含b.xslt和c.xslt的xslt.

b和c都需要位于d.xslt中的模板.如果我在b和c中添加include语句,我在VS2008中遇到重复的模板错误:

The named template 'MyTemplate' does not exist. 
Run Code Online (Sandbox Code Playgroud)

当我尝试点击使用这些XSLT的网页时,我收到错误,但无法正确显示.

如果我在a.xslt中包含d.xslt它将正确显示,但我在b和c中收到错误,指出我引用的模板不存在:

'MyTemplate' is a duplicate template name.  
Run Code Online (Sandbox Code Playgroud)

拥有这种包含树的正确方法是什么?或许它只是一个VS2008问题?

我可以消除d.xslt并将该模板添加到b和c中,但如果模板位于一个位置,则更容易管理.

  • 编辑:添加了实际的VS2008错误文本.

Mad*_*sen 10

使用xsl:include与将它们全部粘贴在一个巨型文件中相同,这也会给您带来相同的重复模板错误.

xsl:import而不是xsl:include.
它将覆盖/合并所有模板,为您提供超级设置.导入链中的最后一个模板将"赢"而不是给出重复的定义错误,因为它具有更高的优先级.

  • 有a.xslt xsl:importb.xslt和c.xslt.
  • 有b.xslt和c.xslt xsl:includexsl:importd.xslt.

就个人而言,我倾向于始终使用xsl:importxsl:include.

唯一真正的缺点xsl:import是,您可能会意外地在导入链中进一步覆盖模板而不知道它(因为您不会得到与您相同的编译错误xsl:include).可能会有轻微的性能损失,因为XSLT处理器必须"思考"更多关于导入链,但我没有发现这是一个问题.