質問
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
}
BootStrap.groovy
new Code(language l, snippet: x).save()
解決
おおよそ次のようなもの:
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()
}
他のヒント
DTDまたは類似のものを指定でき、XMLパーサーがそれに従う場合、スニペット要素のコンテンツをCDATAに指定し、常にそのまま取得できると思います。
xml:space="preserve"
属性を<snippet>
属性に追加してみてください。
所属していません StackOverflow