Análise de XML com registros de multi-linha
Pergunta
Eu gostaria de tomar XML no formato abaixo e carregar cada registro código em um objeto de domínio no meu BootStrap.groovy
. Eu quero preservar a formatação de cada trecho de código.
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>
objeto de domínio
Code {
String language
String snippet
}
BootStrap.groovy
new Code(language l, snippet: x).save()
Solução
aproximadamente algo como isto:
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()
}
Outras dicas
Se você pode specity um DTD ou similar e seus obedece parser XML, eu acho que você pode especificar o conteúdo do elemento trecho a ser CDATA e sempre obtê-lo como está.
Tente adicionar atributo xml:space="preserve"
a elementos <snippet>
.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow