我正在編寫代碼,從Web api檢索XML,然後使用Groovy分析該XML。不幸的是,當調用.text()時,Groovy的XmlParser和XmlSlurper都會從節點的屬性中剝離換行符。Groovy條帶中的XML解析屬性新行
如何獲取屬性的文本,包括新行?
示例代碼:
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 [email protected]()
}
的輸出是:
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輸出。
這是很好的知道,我已經通知那些生成XML,他們做錯了......任何機會,你有一種方法來替換XML文件的屬性與另一回車回車字符串我可以把回到回車時,當我閱讀文本?在我等待真正的XML更改時,這是一個可以解決這個問題的黑客技術。 – billjamesdev 2010-04-30 20:56:04
你可以嘗試玩弄角色引用,如果這不起作用,可以自己處理自定義的可替換序列。 – SteveD 2010-05-01 07:30:08