Question

J'aimerais prendre XML dans le format ci-dessous et charger chaque enregistrement de code dans un objet de domaine dans mon BootStrap.groovy. Je veux préserver la mise en forme de chaque extrait de 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>

Objet de domaine

Code {
    String language
    String snippet
}

BootStrap.groovy

new Code(language l, snippet: x).save()
Était-ce utile?

La solution

à peu près quelque chose comme ça:

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()
}

Autres conseils

Si vous pouvez spécifier une DTD ou similaire et que votre analyseur XML s'y conforme, je pense que vous pouvez spécifier que le contenu de l'élément de fragment est CDATA et qu'il soit toujours tel quel.

Essayez d'ajouter xml:space="preserve" l'attribut à <snippet> éléments.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top