2010-07-16 12 views
7

Estoy usando groovy.xml.MarkupBuilder para crear una respuesta XML pero crea un resultado bastante impreso que no es necesario en la producción.groovy.xml.MarkupBuilder disable PrettyPrint

 def writer = new StringWriter() 
     def xml = new MarkupBuilder(writer) 
     def cities = cityApiService.list(params) 

     xml.methodResponse() { 
      resultStatus() { 
       result(cities.result) 
       resultCode(cities.resultCode) 
       errorString(cities.errorString) 
       errorStringLoc(cities.errorStringLoc) 
      } 
} 

Este código produce:

<methodResponse> 
    <resultStatus> 
    <result>ok</result> 
    <resultCode>0</resultCode> 
    <errorString></errorString> 
    <errorStringLoc></errorStringLoc> 
    </resultStatus> 
</methodResponse> 

pero no necesita ningún identation - sólo quiero una llanura de texto de una fila :)

Respuesta

16

IndentPrinter puede tomar tres parámetros: a PrintWriter, una cadena de guión, y un valor lógico addNewLines. Usted puede obtener el margen de beneficio que desee mediante el establecimiento de addNewLines a falso con una cadena guión vacío, así:

import groovy.xml.MarkupBuilder 

def writer = new StringWriter() 
def xml = new MarkupBuilder(new IndentPrinter(new PrintWriter(writer), "", false)) 

xml.methodResponse() { 
    resultStatus() { 
     result("result") 
     resultCode("resultCode") 
     errorString("errorString") 
     errorStringLoc("errorStringLoc") 
    } 
} 

println writer.toString() 

El resultado:

<methodResponse><resultStatus><result>result</result><resultCode>resultCode</resultCode><errorString>errorString</errorString><errorStringLoc>errorStringLoc</errorStringLoc></resultStatus></methodResponse> 
+0

'IndentPrinter' toma un' Writer' como primer parámetro, no un 'PrintWriter'. Así que puedes pasar 'writer' directamente a él, no tienes que construir un' PrintWriter'. – Miscreant

3

sola observación de los JavaDocs hay una método en IndentPrinter donde puede establecer el nivel de sangría, aunque no va a poner todo en una sola línea para usted. Tal vez usted puede escribir su propio Printer

+1

sí, vi que - que podría desactivar identation pero los saltos de línea todavía están presentes – Oleksandr

Cuestiones relacionadas