使用 groovy GStringTemplateEngine() 循环模板
looping a template using groovy GStringTemplateEngine()
我的要求是创建一个模板引擎以支持其中的循环。
最终模板 应如下所示:
#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
或 提供的所有解决方案Eduardo Melzer
导致以下输出在模板末尾带有额外的空行。这可能是什么原因?* 解决方案提供商是否无法看到此行为,或者问题仅出在我的系统上?
# groovy loop_template.groovy
env:
- name: param1
value : 1
- name: param2
value : 2
root@instance-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
我的要求是创建一个模板引擎以支持其中的循环。
最终模板 应如下所示:
#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
或 提供的所有解决方案Eduardo Melzer
导致以下输出在模板末尾带有额外的空行。这可能是什么原因?* 解决方案提供商是否无法看到此行为,或者问题仅出在我的系统上?
# groovy loop_template.groovy
env:
- name: param1
value : 1
- name: param2
value : 2
root@instance-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