2009-02-10 92 views
8

基本上我想有一个xslt成为我的'基'xslt,并希望将其链接到子xslt文件。我可以将xslt链接到另一个xslt吗?

这可能吗?

目标是减少代码重复。

我们将会对各类客户很多孩子XSLT文件都用自己的格式和其他文本等,不想重复基本代码为每个客户端XSLT。

我知道我们可以根据客户的类型进行格式化,但这会使xslt混乱。 理想情况下,就像每个客户的客户相关代码一样。

这不是xslt的做法吗?我是xslt的新手!

回答

14
<xsl:import href="library/utility-include.xsl" /> 

href路径是相对于当前的xsl文件。 <xsl:import/> documentation

请记住,您必须编写导入行作为<xsl:stylesheet><xsl:transform>的第一个子元素。它们不能出现在整个文件中。

10

由于所有其他的答案已经指定,有两个XSLT指令

<xsl:import>

<xsl:include>

设计恰好提供这种能力。

您可能会感兴趣的是,有完整的库模板和函数可以在内部导入库的其他样式表。库的样式表旨在导入用户的XSLT样式表中。

例如,确实有看FXSL library在XSLT函数式编程。

4

所有其他的答案给你足够的信息,
我想提一个更重要的事情在这里..你甚至可以“通过(这两种方式)参数”两(主叫和被叫之间的文件,如果他们需要共享的任何数据)XSLT文件..
此功能在播放/ XSLT之外版本1.0,您可能需要在未来的重要作用..
:)

0

是的,你可以使用标签在不同的XSLT拉:

<xsl:include href="OtherTemplate.xslt" /> 

有几个陷阱!所以要小心!

“父级”XSLT将缓存包含的XSLT。因此,如果您对嵌套/包含的XSLT进行更改 - 它不会在父XSLT转换中直接显示。我“认为”这可能与使用XslCompiledTransform有关 - 但不是100%。无论如何,如果您修改父级XSLT,它将刷新缓存。 (这在某些项目中是一个非常恼人的问题)

其次,您可能会遇到$ currentPage参数的问题。它只能在整个XSLT样式表中声明一次 - 包括任何“包含”!所以请小心你引用元素的地方!参考here