替换文件中的 GString 标签

发布于 2024-07-23 06:33:49 字数 337 浏览 5 评论 0原文

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

在我的常规代码中,我加载 xml 文件来替换此 GString 标记,如下所示:

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

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

有人可以帮助我吗?

谢谢

i've got a word document saved in xml format. In this document, there are some GString Tag like $name.

In my groovy code, i load the xml file to replace this GString tag like this:

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

But it doesn't works. The GString Tag doesn't be replaced by my variable 'name'.

Could anyone help me ?

THX

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

漫漫岁月 2024-07-30 06:33:49

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

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)

Better to use a templating here. Load the xmml file as a template and create a binding to replace the placeholders. A simple example could be like

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)
故事灯 2024-07-30 06:33:49

目前,模板化是一种方法。 但您可能需要在 JIRA GROOVY-2505 中关注此问题。 当从外部源读取字符串时,将字符串转换为 GString 是一个功能请求:

有人多次询问
关于如何转换的邮件列表
将 String 转换为 GString 或计算 a
作为 GString 的字符串。 需求出现了
当一个字符串来自一个
外部源并包含 GString
表达式,例如 XML 文件或
一个配置文件。 目前一
需要调用 GroovyShell
或 SimpleTemplateEngine
完成任务。 在这两种情况下
这需要几行代码并且
直观上并不明显。 一个可以
ether 添加 GDK 方法到 String 这样
作为“评估”(以我的谦卑
意见将是最好的)或
提供形式的转换
“字符串作为 GString”

Currently templating is the approach. But you might want to keep an eye on this issue in JIRA GROOVY-2505. It is a feature request to convert a String to a GString in cases when the string is read from an external source:

Several times it has been asked on the
mailing list on how to either convert
a String to a GString or to evaluate a
String as a GString. The need arises
when a String comes in from an
external source and contains a GString
expression, for example an XML file or
a Configuration file. Currently one
needs to either invoke the GroovyShell
or the SimpleTemplateEngine to
accomplish the task. In both cases
this takes several lines of code and
is not intuitively obvious. One could
ether add a GDK method to String such
as "evaluate" (which in my humble
opinion would be the nicest) or
provide a conversion of the form
"String as GString"

夜还是长夜 2024-07-30 06:33:49

然而,相当老的问题,问题 http://jira.codehaus.org /browse/GROOVY-2505 仍未解决...
有一个很好的解决方法,其行为几乎类似于 GString 替换,通过使用 Apache StrSubstitutor 类。 对我来说,它比创建模板更舒服 - 您可以在 XML 文件中使用 GString:

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>

Pretty old question, however, issue http://jira.codehaus.org/browse/GROOVY-2505 still not solved...
There is a nice workaround, which behaves almost like GString substitution, by using Apache StrSubstitutor class. For me it is more comfortable than creating templates - you can use GStrings in XML files:

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 file:

<?xml version="1.0" encoding="UTF-8"?>
<eample>
    <text_to_substitute>${text_to_substitute}</text_to_substitute>
</example>

Result:

<?xml version="1.0" encoding="UTF-8"?>
<eample>
    <text_to_substitute>example text - MY EXTRA TEXT</text_to_substitute>
</example>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文