2008-10-23 24 views
10

漂亮的打印的XML響應的最佳方式在一個Grails行動給出這樣的:在Grails的

def xml = { 
    rss(version: '2.0') { 
     ... 
    } 
} 
render(contentType: 'application/rss+xml', xml) 

我看到這一點:

<rss><channel><title></title><description></description><link></link><item></item></channel></rss> 

有一個簡單的方法來打印這個XML?可能是內置在渲染方法中的東西?

回答

4

按照reference docs,你可以使用下面的配置選項啓用漂亮的打印:

grails.converters.default.pretty.print (Boolean) 
//Whether the default output of the Converters is pretty-printed (default: false) 
19

這是一個簡單的方法來美化打印XML,只使用Groovy代碼:

def xml = "<rss><channel><title></title><description>" + 
    "</description><link></link><item></item></channel></rss>" 

def stringWriter = new StringWriter() 
def node = new XmlParser().parseText(xml); 
new XmlNodePrinter(new PrintWriter(stringWriter)).print(node) 

println stringWriter.toString() 

結果:

<rss> 
    <channel> 
    <title/> 
    <description/> 
    <link/> 
    <item/> 
    </channel> 
</rss> 
+0

一個人必須想知道爲什麼沒有這樣做一個更巧妙的方式... – Dan 2009-11-12 13:43:44

+1

但這卻似乎不應該有標籤中添加空格。這裏有幾個關於這個的註釋:http://jira.codehaus.org/browse/GROOVY-3265 – 2012-01-03 13:23:39

3

使用MarkupBuilder漂亮地打印您的Groovy XML

def writer = new StringWriter() 
def xml = new MarkupBuilder (writer) 

xml.rss(version: '2.0') { 
     ... 
    } 
} 

render(contentType: 'application/rss+xml', writer.toString()) 
1

使用XmlUtil:

def xml = "<rss><channel><title></title><description>" + 
    "</description><link></link><item></item></channel></rss>" 

println XmlUtil.serialize(xml)