我有很多xslt
文件有时包含一些相同对象的完全重复的信息。是否有可能将其带到另一个xslt
并包含在现有的中?如何正确地做到这一点?
2 回答
<xsl:include>
有助于模块化 XSLT 代码,但本身不会删除重复的代码。
XSLT 最基本的特性之一——模板——如果使用得当,可以显着消除任何代码重复:
模板的匹配模式匹配要应用模板的不同类型的节点——这消除了在处理相同匹配模式的不同实例时在许多地方使用相同代码时的重复。虽然可以类似于使用函数/子例程调用模板
<xsl:call-template>
,但使用 选择匹配的模板进行处理更加强大和灵活<xsl:apply-templates>
——后者类似于在 OOP 中从基本类型调用虚函数——我们不知道在执行时将存在哪些派生对象以及将选择相应虚函数的许多特化(覆盖)中的哪一个来执行。上述技术与将参数传递给模板相结合,有助于消除只有某些值/节点不同的重复代码。
使用模板可以模拟高阶函数 (HOF),并将模板/函数作为参数传递给另一个模板/函数,并返回模板函数作为应用模板/函数的结果。可以使用功能组合和部分应用动态创建新功能。FXSL 库为 XSLT 1.0 和 XSLT 2.0 实现了 HOF。
在即将到来的 XPath 3.0 / XSLT 3.0 中,HOF 是该语言的标准特性。函数可以作为参数传递,也可以作为结果返回给其他函数。可以在 XPath 3.0 表达式中动态创建匿名(内联)函数。新的标准 XPath 3.0 函数
fold-left()
,是任何函数式编程语言fold-right()
中map()
通常使用的最基本的函数。它们的使用可以显着减少代码大小和代码重复。
您应该使用<xsl:include>
看看http://www.xml.com/pub/a/2000/11/01/xslt/index.html或者
XSLT 中是否有一种包含一次?