Given this in a grails action:
def xml = {
rss(version: '2.0') {
...
}
}
render(contentType: 'application/rss+xml', xml)
I see this:
<rss><channel><title></title><description></description><link></link><item></item></channel></rss>
Is there an easy way to pretty print the XML? Something built into the render method, perhaps?
According to the reference docs, you can use the following configuration option to enable pretty printing:
grails.converters.default.pretty.print (Boolean)
//Whether the default output of the Converters is pretty-printed ( default: false )
This is a simple way to pretty-print XML, using Groovy code only:
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()
results in:
<rss>
<channel>
<title/>
<description/>
<link/>
<item/>
</channel>
</rss>
Use MarkupBuilder to pretty-print your Groovy xml
def writer = new StringWriter()
def xml = new MarkupBuilder (writer)
xml.rss(version: '2.0') {
...
}
}
render(contentType: 'application/rss+xml', writer.toString())
Use XmlUtil :
def xml = "<rss><channel><title></title><description>" +
"</description><link></link><item></item></channel></rss>"
println XmlUtil.serialize(xml)