替换文件中的GString标记

时间:2009-06-11 15:56:56

标签: file groovy gstring

我有一个以xml格式保存的word文档。在本文档中,有一些GString标签,如$ name。

在我的groovy代码中,我加载xml文件来替换这个GString标签,如下所示:

    def file = new File ('myDocInXml.xml')
    def name = 'myName'
    file.eachLine { line ->
        println line
    }

但它不起作用。 GString标签不会被我的变量'name'替换。

有人可以帮助我吗?

THX

3 个答案:

答案 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>