2012-10-05 31 views
1

我有很多xslt文件,它们有时包含某些相同对象的完全重复信息。是否有可能将它带到另一个xslt并将其包含在现有的内部?如何做到这一点?带有重复信息的xslt集

回答

2

<xsl:include>有助于模块化XSLT代码,但本身并不删除重复的代码。

一个XSLT的最根本的特征 - templates - 如果使用得当,可以显著消除任何代码重复

  1. 模板的匹配模式不同类型的节点匹配其上模板将被应用 - 当在处理相同匹配模式的不同实例的许多地方使用相同的代码时,这消除了重复。虽然可以使用类似于函数/子例程的方式调用模板,但使用<xsl:apply-templates> - 选择匹配的模板更加强大和灵活 - 后者类似于在OOP中调用基本类型的虚拟函数 - 我们不知道执行时将存在哪些派生对象,以及相应虚拟函数中可能有多少特化(覆盖)中的哪些将被选中执行。

  2. 上述技术与相结合,将参数传递给模板有助于消除只有一些值/节点不同的重复代码。

  3. 使用模板可以模拟高阶函数(HOF)并将模板/函数作为参数传递给另一个模板/函数,并返回模板函数作为应用模板/函数的结果。可以使用功能组合和部分应用程序动态创建新功能。 FXSL库为XSLT 1.0和XSLT 2.0实现HOF。

  4. 在即将到来的XPath 3.0/XSLT 3.0中,HOF是该语言的标准功能。函数可以作为参数传递并作为结果返回给其他函数。匿名(内联)函数可以在XPath 3.0表达式中动态创建。新的标准XPath 3.0函数fold-left()fold-right()map()是通常在任何函数式编程语言中使用的最基本的函数。它们的使用可以显着减少代码大小和代码重复。

+0

很好的解释;我个人使用仅用于所需变量的长列表; +1 – Peter

+0

@Peter,是的,XSLT模板和模式匹配是一个非常强大的功能 - 通常在其他语言中缺少。 –