2010-07-16 21 views
7

Sto usando groovy.xml.MarkupBuilder per creare una risposta XML, ma crea un risultato piuttosto stampato che non è necessario nella produzione.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) 
      } 
} 

Questo codice produce:

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

Ma non ho bisogno di alcun identation - voglio solo un semplice testo una riga :)

risposta

16

IndentPrinter può prendere tre parametri: un PrintWriter, una stringa trattino, e un valore booleano addNewLines. È possibile ottenere il markup desiderato impostando addNewLines su false con una stringa trattino vuota, in questo modo:

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() 

Il risultato:

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

'IndentPrinter' prende un' Writer' come primo parametro, non un 'PrintWriter'. Quindi puoi semplicemente passare 'writer' direttamente ad esso, non devi costruire un' PrintWriter'. – Miscreant

3

solo guardando il JavaDocs c'è un metodo su IndentPrinter in cui è possibile impostare il livello di rientro, anche se non è intenzione di mettere tutto su una sola riga per voi. Forse si può scrivere il proprio Printer

+1

sì, ho visto che - ho potuto disattivare identation ma interruzioni di riga sono ancora presenti. – Oleksandr