我的要求是创建模板引擎以支持其中的循环。
最终模板应如下所示:
#cat output.template
env:
- name : param1
value : 1
- name : param2
value : 2
我有伪代码来解释我的要求
def f = new File('output.template')
def engine = new groovy.text.GStringTemplateEngine()
def mapping = [
[ name : "param1",
value : "1"],
[ name : "param2",
value : "2" ]
] // This mapping can consists of a multiple key value pairs.
def Template = engine.createTemplate(f).make(mapping)
println "${Template}"
有人可以帮助我如何实现模板内部循环的要求以及如何修改模板?
*更新: 提供的所有解决方案 tim_yates
或< em> Eduardo Melzer
导致以下输出在模板末尾添加了额外的空白行。可能是什么原因?* 解决方案提供商是否无法看到此行为或问题仅限于我的系统?。
# groovy loop_template.groovy
env:
- name: param1
value : 1
- name: param2
value : 2
root@instance-1:
答案 0 :(得分:1)
将模板文件更改为:
#cat output.template
env:<% mapping.eachWithIndex { v, i -> %>
- name : ${v.name}
value : ${v.value}<% } %>
如您所见,您的模板文件需要一个名为mapping
的输入参数,因此您需要将主代码更改为以下内容:
def f = new File('output.template')
def engine = new groovy.text.GStringTemplateEngine()
def mapping = [
[ name : "param1", value : "1"],
[ name : "param2", value : "2"]
] // This mapping can consists of a multiple key value pairs.
def Template = engine.createTemplate(f).make([mapping: mapping])
println "${Template}"
输出:
#cat output.template
env:
- name : param1
value : 1
- name : param2
value : 2