和Ant一起使用FreeMarker
我们现在知道有两种"FreeMarker Ant tasks":
-
FreemarkerXmlTask
:它来自于FreeMarker的发布包, 打包到freemarker.jar
中。 这是使用FreeMarker模板转换XML文档的轻量级的,易于使用的Ant任务。 它的入口源文件(输入文件)是XML文件,和生成的输出文件对应, 这是通过单独模板实现的。也就是说,对于每个XML文件, 模板会被执行(在数据模型中的XML文档), 模板的输出会被写入到一个和原XML文件名相似名称的文件中。 因此,模板文件扮演了一个和XSLT样式表相似的角色,但它是FTL,而不是XSLT。 -
FMPP:这是一个重量级的,以很少的XML为中心, 第三方Ant任务(和独立的命令行工具)。 它主要的目的是用作为模板文件的源文件(输入文件)生成它们自己对应的输出文件, 但它也对以XML为源文件的
FreemarkerXmlTask
进行支持。 而且,相比于FreemarkerXmlTask
,它还有额外的特性。 那么它的缺点是什么?它太复杂太一般化了,不容易掌握和使用。
这一部分介绍了 FreemarkerXmlTask
,
要了解FMPP更多的信息,可以访问它的主页:http://fmpp.sourceforge.net/。
为了使用 FreemarkerXmlTask
,
首先必须在你的Ant构建文件中定义
freemarker.ext.ant.FreemarkerXmlTask
,然后调用任务。
假设你想使用假定的"xml2html.ftl"模板转换一些XML文档到HTML,
XML文档在目录"xml"中而HTML文档生成到目录"html"中,你应该这样来写:
<taskdef name="freemarker" classname="freemarker.ext.ant.FreemarkerXmlTask"> <classpath> <pathelement location="freemarker.jar" /> </classpath> </taskdef> <mkdir dir="html" /> <freemarker basedir="xml" destdir="html" includes="**/*.xml" template="xml2html.ftl" />
这个任务将会对每个XML文档调用模板。每个文档将会被解析成DOM树,
然后包装成FreeMarker结点变量。当模板开始执行时,
特殊变量 .node
被设置成XML文档结点的根root。
请注意,如果你正使用遗留的(FreeMarker 2.2.x 和以前版本)XML适配器实现,
也同样可以进行,而且XML树的根结点被放置在数据模型中,
作为变量 document
。它包含了遗留的
freemarker.ext.xml.NodeListModel
类的实例。
请注意,所有通过构建文件定义的属性将会作为名为"properties"的哈希表模型来用。
一些其他方法也会可用;对模板中什么样的可用变量的详细描述,
还有什么样的属性可以被任务接受,参见
freemarker.ext.ant.FreemarkerXmlTask
的JavaDoc文档。