تحليل XML مع سجلات متعدد الخطوط
سؤال
وأود أن أغتنم 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()
}
نصائح أخرى
إذا يمكنك specity على DTD أو ما شابه ذلك ومحلل XML الخاصة بك يطيع ذلك، وأعتقد يمكنك تحديد محتويات عنصر المتكررة ليكون CDATA ودائما الحصول عليه كما هو.
وحاول إضافة السمة xml:space="preserve"
إلى <snippet>
العناصر.
لا تنتمي إلى StackOverflow