Parsen von XML mit multi-line records
Frage
Ich möchte XML-Daten in das format unten und laden Sie jede code-Datensatz in einer Domäne Objekt in meinem BootStrap.groovy
.Ich möchte die Formatierung beibehalten werden jedes code-snippet.
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>
Domain-Objekt
Code {
String language
String snippet
}
BootStrap.groovy
new Code(language l, snippet: x).save()
Lösung
in etwa so etwas wie dieses:
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()
}
Andere Tipps
Wenn Sie eine DTD oder ähnlich und XML-Parser gehorcht specity kann, glaube ich Ihnen, den Inhalt des Snippets Element angeben können CDATA zu sein und bekommen es immer, wie sie ist.
Versuchen xml:space="preserve"
Attribut Hinzufügen von Elementen <snippet>
.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow