Preface

尽管 FreeMarker 最初设计为网页模板引擎,但从 2.3 版开始,它还针对另一个应用程序域:将 XML 转换为任意文本输出(例如 HTML 文件)。因此,在许多情况下,FreeMarker 是 XSLT 的替代方案。

从技术上讲,转换 XML 文档没有什么特别的。就像使用 FreeMarker 进行其他任何操作一样:将 XML 文档放入数据模型(可能还有其他变量)中,然后将数据模型与生成输出文本的 FTL 模板合并。为更好地处理 XML 而引入的其他功能包括:节点 FTL 变量类型(将节点表示为通用树结构,不仅可用于 XML),以及处理它们的内置和指令,以及您无法使用的 XML 包装器。此框将 XML 文档作为模板的 FTL 变量公开。

使用 FreeMarker 或 XSLT 有什么区别? FTL 语言具有通常的命令性/过程逻辑。另一方面,XSLT 是一种具有声明性风格的语言,是由“太聪明”的人设计的,因此采用它的逻辑或在许多情况下使用它都不容易。同样,它的语法非常冗长。但是,当您处理 XML 文档时,XSLT 的“应用模板”方法可能非常方便,因此 FreeMarker 支持类似的“访问者模式”。因此,在许多应用程序中,编写 FTL 样式表比 XSLT 样式表容易得多。另一个基本区别是 FTL 将节点树“转换”为文本,而 XSLT 将树转换为另一棵树。因此,您不能总是在可以使用 XSLT 的地方使用 FreeMarker。