用 Groovy 替换模板中的字符串
Replacing a string in a template with Groovy
我有一个用作 "template" 的文本文件,看起来像这样:
[...]
<data>${payload}</data>
[...]
在 Groovy 脚本中,我现在想加载此模板,并且 ${payload}
被替换为脚本中的特定值。
伪代码:
def payload = "Hello world"
def f = new File(filename)
println f.text
因此结果将是:
<data>Hello world</data>
我看过 Groovy 个模板,但我不太明白。
您确实可以使用 groovy 模板引擎,它允许您拥有一些参数化文本。您定义一个结构,然后用您想要的信息填充它
def text = '<h1>${title}</h1><data>${payload}</data>'
def binding = ["title":"My Title", "payload":"Hello world"]
def engine = new groovy.text.SimpleTemplateEngine()
def template = engine.createTemplate(text).make(binding)
println template.toString() // <h1>My Title</h1><data>Hello world</data>
String templateInterpolator(String text, Map model) {
new groovy.text.SthenimpleTemplateEngine()
.createTemplate(text)
.make(model)
.toString()
}
然后:
assert templateInterpolator('Hello ${name}', [name: 'World']) == 'Hello World'
另一个例子:
assert templateInterpolator('''
Dear ${env.receiver},
This is about ${env.topic}
Best Regards,
${env.sender}
''', [env:[receiver: 'Ali', sender: 'Omar', topic: 'My love to you']]) == '''
Dear Ali,
This is about My love to you
Best Regards,
Omar
'''
我有一个用作 "template" 的文本文件,看起来像这样:
[...]
<data>${payload}</data>
[...]
在 Groovy 脚本中,我现在想加载此模板,并且 ${payload}
被替换为脚本中的特定值。
伪代码:
def payload = "Hello world"
def f = new File(filename)
println f.text
因此结果将是:
<data>Hello world</data>
我看过 Groovy 个模板,但我不太明白。
您确实可以使用 groovy 模板引擎,它允许您拥有一些参数化文本。您定义一个结构,然后用您想要的信息填充它
def text = '<h1>${title}</h1><data>${payload}</data>'
def binding = ["title":"My Title", "payload":"Hello world"]
def engine = new groovy.text.SimpleTemplateEngine()
def template = engine.createTemplate(text).make(binding)
println template.toString() // <h1>My Title</h1><data>Hello world</data>
String templateInterpolator(String text, Map model) {
new groovy.text.SthenimpleTemplateEngine()
.createTemplate(text)
.make(model)
.toString()
}
然后:
assert templateInterpolator('Hello ${name}', [name: 'World']) == 'Hello World'
另一个例子:
assert templateInterpolator('''
Dear ${env.receiver},
This is about ${env.topic}
Best Regards,
${env.sender}
''', [env:[receiver: 'Ali', sender: 'Omar', topic: 'My love to you']]) == '''
Dear Ali,
This is about My love to you
Best Regards,
Omar
'''