1

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

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

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

但它不起作用。GString 标记不会被我的变量“名称”替换。

谁能帮助我?

谢谢

4

3 回答 3

5

最好在这里使用模板。将 xmll 文件加载为模板并创建绑定以替换占位符。一个简单的例子可能是

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)
于 2009-06-12T07:39:08.087 回答
1

目前模板是方法。但是您可能希望在 JIRA GROOVY-2505中关注这个问题。在从外部源读取字符串的情况下,将字符串转换为 GString 是一项功能请求:

多次在邮件列表中询问如何将字符串转换为 GString 或将字符串评估为 GString。当字符串来自外部源并包含 GString 表达式(例如 XML 文件或配置文件)时,就会出现这种需求。目前需要调用 GroovyShell 或 SimpleTemplateEngine 来完成任务。在这两种情况下,这都需要几行代码,而且直观上并不明显。可以将 GDK 方法添加到 String,例如“evaluate”(在我看来这是最好的),或者提供“String as GString”形式的转换

于 2009-06-20T01:40:58.187 回答
0

很老的问题,但是,问题http://jira.codehaus.org/browse/GROOVY-2505仍然没有解决......有一个很好的解决方法,它的行为几乎像 GString 替换,通过使用 Apache StrSubstitutor 类。对我来说,这比创建模板更舒服——你可以在 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>
于 2014-08-26T17:02:14.377 回答