本文参考自Template engines,大部分代码直接引用了文档的内容。
模板引擎介绍
Groovy语言包含了一个模板引擎功能,可以生成各种类型的格式化文件,非常方便。模板引擎有下面几个,它们都实现了Template接口。
- SimpleTemplateEngine - 基本的模板
- StreamingTemplateEngine - 功能和 SimpleTemplateEngine相同,不过支持大于64k的模板
- GStringTemplateEngine - 将模板保存为可写的闭包,在流式场景中很有用
- XmlTemplateEngine - 输出XML文件的模板引擎
- MarkupTemplateEngine - 一个完整的、优化过的模板引擎,可以用于生成HTML等模板
SimpleTemplateEngine
这是最贱的模板引擎, 使用起来也非常简单。直接看Groovy文档的例子吧。可以看到它的模板语法类似JSP标签和EL表达式。
def text = 'Dear "$firstname $lastname",\nSo nice to meet you in <% print city %>.\nSee you in ${
month},\n${signed}'
def binding = ["firstname":"Sam", "lastname":"Pullara", "city":"San Francisco", "month":"December", "signed":"Groovy-Dev"]
def engine = new groovy.text.SimpleTemplateEngine()
def template = engine.createTemplate(text).make(binding)
def result = 'Dear "Sam Pullara",\nSo nice to meet you in San Francisco.\nSee you in December,\nGroovy-Dev'
StreamingTemplateEngine
它和SimpleTemplateEngine类似,只不过能处理比较大的文本。它使用<% %>
、<%= %>
和GString语法。下面的例子同样来自Groovy文档。
def text = '''\
Dear <% out.print firstname %> ${lastname},
We <% if (accepted) out.print 'are pleased' else out.print 'regret' %> \
to inform you that your paper entitled
'$title' was ${ accepted ? 'accepted' : 'rejected' }.
The conference committee.'''
def template = new groovy.text.StreamingTemplateEngine().createTemplate(text)