Я пишу код, где я получаю XML из веб-API, а затем анализирую этот XML с помощью Groovy.К сожалению, кажется, что и XmlParser, и XmlSlurper для Groovy удаляют символы новой строки из атрибутов узлов при вызове .text ().
Как получить текст атрибута , включая символы новой строки?
Пример кода:
def xmltest = '''
<snippet>
<preSnippet att1="testatt1" code="This is line 1
This is line 2
This is line 3" >
<lines count="10" />
</preSnippet>
</snippet>'''
def parsed = new XmlParser().parseText( xmltest )
println "Parsed"
parsed.preSnippet.each { pre ->
println pre.attribute('code');
}
def slurped = new XmlSlurper().parseText( xmltest )
println "Slurped"
slurped.children().each { preSnip ->
println preSnip.@code.text()
}
, вывод которого:
Parsed
This is line 1 This is line 2 This is line 3
Slurped
This is line 1 This is line 2 This is line 3
Хорошо, я смог преобразовать текст, прежде чем проанализировал его,затем преобразовать после, а-ля:
def newxml = xmltest.replaceAll( /code="[^"]*/ ) {
return it.replaceAll( /\n/, "~#~" )
}
def parsed = new XmlParser().parseText( xmltest )
def code = pre.attribute('code').replaceAll( "~#~", "\n" )
Не мой любимый хак, но он будет работать, пока они не исправят свои выходные данные XML.