2010-07-16 5 views
7

Ich benutze groovy.xml.MarkupBuilder, um eine XML-Antwort zu erstellen, aber es erzeugt ein hübsches Druckergebnis, das in der Produktion nicht benötigt wird.groovy.xml.MarkupBuilder deaktivieren 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) 
      } 
} 

Dieser Code erzeugt:

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

Aber ich brauche keine identation - ich möchte nur einen einfachen einzeiligen Text :)

Antwort

16

IndentPrinter drei Parameter annehmen kann: eine PrintWriter, einen Einzug String und einen boolean addNewLines. Sie können die Markup Sie erhalten, indem addNewLines auf false mit einem leeren indent Zeichenfolge, wie eine derartige Einstellung:

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

Das Ergebnis:

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

'IndentPrinter' nimmt einen 'Writer' als ersten Parameter, keinen' PrintWriter'. Sie können also 'writer' direkt an sie übergeben, Sie haben keinen' PrintWriter' konstruiert. – Miscreant

3

Gerade bei dem JavaDocs sucht eine ist Methode auf IndentPrinter, wo Sie die Einzugsebene festlegen können, obwohl es nicht alles für Sie in einer einzigen Zeile setzen wird. Vielleicht können Sie schreiben Sie Ihre eigene Printer

+1

yep, sah ich, dass - i identation aber Zeilenumbrüche deaktivieren könnte sind noch da. – Oleksandr