Разбор XML с многострочными записями - PullRequest
1 голос
/ 06 октября 2008

Я хотел бы взять 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()

Ответы [ 3 ]

1 голос
/ 06 октября 2008

примерно как то так:

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()
}
0 голосов
/ 12 октября 2008

Попробуйте добавить атрибут xml:space="preserve" к <snippet> элементам.

0 голосов
/ 06 октября 2008

Если вы можете специфицировать DTD или подобное, и ваш синтаксический анализатор XML подчиняется ему, я думаю, вы можете указать содержимое элемента сниппета как CDATA и всегда получать его как есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...