#xml #grails #groovy
Вопрос:
Я хотел бы взять XML в формате ниже и загрузить каждую запись кода в объект домена в моем BootStrap.groovy
. Я хочу сохранить форматирование каждого фрагмента кода.
XML
<records>
<code>
<language>Groovy</language>
<snippet>
println "This is Groovy"
println "A very powerful language"
</snippet>
</code>
<code>
<language>Groovy</language>
<snippet>
3.times {
println "hello"
}
</snippet>
</code>
<code>
<language>Perl</language>
<snippet>
@foo = split(",");
</snippet>
</code>
</records>
Объект Домена
Code {
String language
String snippet
}
Бутстрэп.классный
new Code(language l, snippet: x).save()
Комментарии:
1. Я немного исправил форматирование, надеюсь, вы не возражаете, и, тем не менее, я невольно не изменил семантику вашего поста.. (пожалуйста, не стесняйтесь вернуть его, если у меня есть!)
2. хех, мы оба отредактировали его одновременно. я был быстрее и проиграл 🙁
3. Ой, извини, парень. Рад видеть, что мы оба внесли почти одинаковые изменения ;). Я удивлен, что сайт не информирует вас, редактировалось ли сообщение с тех пор, как вы начали с ним возиться.. Искажать изменения других людей нехорошо.
Ответ №1:
примерно что-то вроде этого:
def CODE_XML = '''
<records>
<code>
<language>Groovy</language>
<snippet>
println "This is Groovy"
println "A very powerful language"
</snippet>
</code>
<code>
<language>Groovy</language>
<snippet>
3.times {
println "hello"
}
</snippet>
</code>
<code>
<language>Perl</language>
<snippet>
@foo = split(",");
</snippet>
</code>
</records>
'''
def records = new XmlParser().parseText(CODE_XML)
records.code.each() { code ->
new Code(language: code.language, snippet: code.snippet).save()
}
Ответ №2:
Если вы можете указать DTD или что-то подобное, и ваш синтаксический анализатор XML подчиняется ему, я думаю, вы можете указать содержимое элемента фрагмента как CDATA и всегда получать его как есть.
Ответ №3:
Попробуйте добавить xml:space="preserve"
атрибут к <snippet>
элементам.