Заменить теги GString в файле - PullRequest
1 голос
/ 11 июня 2009

У меня есть документ Word, сохраненный в формате XML. В этом документе есть некоторые теги GString, такие как $ name.

В моем коде Groovy я загружаю XML-файл, чтобы заменить этот тег GString следующим образом:

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

Но это не работает. Тег GString не заменяется моей переменной name.

Может ли кто-нибудь мне помочь?

THX

Ответы [ 3 ]

5 голосов
/ 12 июня 2009

Лучше использовать шаблонизацию здесь. Загрузите файл 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)
1 голос
/ 20 июня 2009

В настоящее время это шаблонный подход. Но вы можете следить за этой проблемой в JIRA GROOVY-2505 . Это функциональный запрос для преобразования String в GString в случаях, когда строка читается из внешнего источника:

Несколько раз об этом спрашивали список рассылки о том, как конвертировать Строка в GString или для оценки Строка как GString. Возникает необходимость когда строка приходит из внешний источник и содержит GString выражение, например, файл XML или Файл конфигурации. В настоящее время один необходимо либо вызвать GroovyShell или SimpleTemplateEngine для выполнить задачу. В обоих случаях это занимает несколько строк кода и не является интуитивно очевидным. Можно эфир добавить метод GDK для String такой как "оценить" (что по моему скромно мнение будет самым хорошим) или обеспечить преобразование формы "String as GString"

0 голосов
/ 26 августа 2014

Довольно старый вопрос, однако, проблема http://jira.codehaus.org/browse/GROOVY-2505 все еще не решена ... Есть хороший обходной путь, который ведет себя почти как подстановка GString, используя класс Apache StrSubstitutor. Для меня это удобнее, чем создавать шаблоны - вы можете использовать GStrings в XML-файлах:

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>
...