2008-10-23 18 views
10

dado esto en una acción griales:mejor manera de respuesta XML impresión bonita en griales

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

veo esto:

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

hay una manera fácil de imprimir prácticamente el xml? algo integrado en el método de renderizado, tal vez?

Respuesta

4

De acuerdo con la reference docs, puede utilizar la opción de configuración siguiente para habilite la impresión bonita:

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

Esta es una forma sencilla de XML a bonito-impresión, utilizando sólo el código 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() 

resultados en:

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

uno se pregunta por qué no hay una manera más groovy para hacer esto ... – Dan

+1

esto sin embargo parece añadir espacios en blanco dentro de las etiquetas que no debería tener. Hay un par de notas sobre esto aquí: http://jira.codehaus.org/browse/GROOVY-3265 –

3

Utilice MarkupBuilder para imprimir su Groovy xml

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

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

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

Uso XmlUtil:

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

println XmlUtil.serialize(xml) 
+1

para mí (máquina maravillosa 1.8/Windows) esto es imprimir sin ninguna sangría (por lo que no es bonita). – Guillaume

Cuestiones relacionadas