首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Groovy中的模版引擎(二)

MarkupTemplateEngine

MarkupTemplateEngine 是Groovy所有模版类中最强大的实现类。如类名所示,Markup是标记类的语法,用于XML,HTML等。

与其它模版不同的是,MarkupTemplateEngine 使用与其它模版不一样。

还记得前面我们学习过的StreamingMarkupBuilder和JsonBuilder所使用过的书写格式吗?MarkupTemplateEngine使用的书写方式几乎相同。

先看一个简单的例子:

输出结果:

通过这个简单的例子可以看到,输出了Markup格式的结果。事实上,这个模版就是Groovy DSL,都是合法的Groovy语法。

MarkupTemplateEngine提供了几个重要的功能:

模版语法

Markup格式类的组成都是由标签(tag)、标签属性(property)及内容(text)构成,标签可以包含子标签,这些都有对应的语法:

可见,每个方法名称就是标签名称,属性则使用键值对的方式,而文本则是其中一个参数,参数位置没有关系,会被自动识别;如果包含子节点,则使用闭包包含即可。

常用函数

学习XML对应类的时候,已经见到过StreamingMarkupBuilder中包含了一些方法用来生成对应的指令如XML头等,Markup模版引擎类提供了类似的指令方法:

* yieldUnescaped

会直接输出给定的语句,不转义其中的字符。

* yield

和上面相反,会转义特殊字符。

* head

这些HTML的标签方法会生成对应的标签。

* xmlDeclaration

方法会生成一个标准的XML文档头。

* comment

方法生成 HTML注释。

* newLine

生成一个新行。

模版文件

include.tpl:

执行代码如下:

模版文件提供了三种形式的导入指令:

* include template: 'include.tpl'

引入另一个模版文件

* include unescaped: 'include.txt'

原样引入文件,不转换任何字符

* include escaped: 'include.txt'

根据转换符号进行引入文件的转换

还有3个内置方法提供一样的功能:

* includeGroovy()

* includeEscaped()

* includeUnescaped()

配置项目

MarkupTemplateEngine允许使用配置来指定引擎的行为:

* declarationEncoding :

指定xmlDeclaration()方法输出的编码格式,缺省为不输出编码格式。

此时输出

不设置则输出为

* expandEmptyElements :

是否扩展空标签,缺省为false, 如果为真的时候则空标签用一对标签来表示,例如:

* useDoubleQuotes

是否使用双引号,缺省为 false, 属性值使用单引号包裹,为真则使用双引号包裹。

* newLineString

换行符,缺省使用系统属性line.separator,也就是\n。当设置了自定义的值,则使用自定义的值。

例如:对于

当newLineString = '

'时,输出

* autoEscape

是否自动转义,缺省为false。当设置为真的时候,传入的参数遇到转义符时则自动转义。

* autoIndent

是否自动缩进。缺省为假。当设置为真时,则按照节点的包含层次,使用 autoIndentString 规定的缩进符号进行缩进排版。

* autoIndentString

缩进字符串,缺省为4个空格。用于当autoIndent为真时的缩进排版。

* autoNewLine

设置是否自动换行,缺省为false,当为真时,则每个tag后自动换行。例如:

输出

如果为假则为:

* baseTemplateClass

* locale

这是本地化内容, 缺省使用宿主机的Local。

MarkupTemplateEngine 还有很多内容,所需篇幅很长,下节继续。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180204G0QNBQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券