سؤال

وأود أن أغتنم 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> العناصر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top