2010-07-16 30 views
7

XML yanıtı oluşturmak için groovy.xml.MarkupBuilder kullanıyorum ancak üretimde gereksiz olan oldukça basılı bir sonuç yaratıyor.groovy.xml.MarkupBuilder'i devre dışı bırak PrettyPrint

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

Ama herhangi identation gerekmez - Bir var ben sadece sade tek satır metin :)

cevap

16

IndentPrinter üç parametre alabilir: a PrintWriter, bir girinti dize ve bir boolean addNewLines. Çok gibi boş bir girinti dize ile false addNewLines ayarlayarak istediğiniz işaretlemeyi alabilirsiniz:

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

sonuç: - i identation ama satır sonları devre dışı olabilir

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

'IndentPrinter'' PrintWriter' değil, ilk parametresi olarak bir 'Writer' alır. Böylece, yazara doğrudan yazabilirsin, bir "PrintWriter" oluşturmadın. – Miscreant

3

Sadece javadocs bakarak istiyorum:

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

Bu kod üretir IndentPrinter numaralı yöntemde, Indent seviyesini ayarlayabilirsiniz, ancak her şeyi tek bir satıra koymayacaksınız. Belki yazabilir kendi Printer

+1

evet, ben gördüm hala mevcut. – Oleksandr

İlgili konular