我有一个以xml格式保存的word文档。在本文档中,有一些GString标签,如$ name。
在我的groovy代码中,我加载xml文件来替换这个GString标签,如下所示:
def file = new File ('myDocInXml.xml')
def name = 'myName'
file.eachLine { line ->
println line
}
但它不起作用。 GString标签不会被我的变量'name'替换。
有人可以帮助我吗?
THX
答案 0 :(得分:5)
最好在这里使用模板。将xml文件作为模板加载并创建绑定以替换占位符。一个简单的例子可能就像
def xml='''
<books>
<% names.each { %>
<book>
$it
</book>
<%}%>
</books>
'''
def engine=new groovy.text.SimpleTemplateEngine()
def template=engine.createTemplate(xml)
def binding=[names:['john','joe']]
template.make(binding)
答案 1 :(得分:1)
目前模板化的方法。但是你可能想在JIRA GROOVY-2505中关注这个问题。在从外部源读取字符串的情况下,这是一个将String转换为GString的功能请求:
已多次询问过 关于如何转换的邮件列表 字符串到GString或评估 字符串作为GString。需要出现 当一个String来自一个 外部源并包含一个GString 表达式,例如XML文件或 配置文件。目前一个 需要调用GroovyShell 或者SimpleTemplateEngine来 完成任务。在这两种情况下 这需要几行代码和 不直观明显。有人可以 ether将GDK方法添加到String中 作为“评价”(在我的谦虚 意见将是最好的)或 提供表格的转换 “String as GString”
答案 2 :(得分:0)
相当古老的问题,问题http://jira.codehaus.org/browse/GROOVY-2505仍未解决...... 通过使用Apache StrSubstitutor类,有一个很好的解决方法,其行为几乎与GString替换相似。对我来说,它比创建模板更舒服 - 您可以在XML文件中使用GStrings:
import org.apache.commons.lang.text.StrSubstitutor
strResTpl = new File(filePath + "example.xml").text
def extraText = "MY EXTRA TEXT"
map = new HashMap();
map.put("text_to_substitute", "example text - ${extraText}")
def result = new StrSubstitutor(map).replace(strResTpl);
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<eample>
<text_to_substitute>${text_to_substitute}</text_to_substitute>
</example>
结果:
<?xml version="1.0" encoding="UTF-8"?>
<eample>
<text_to_substitute>example text - MY EXTRA TEXT</text_to_substitute>
</example>