2010-07-16 48 views
7

我正在使用groovy.xml.MarkupBuilder來創建XML響應,但它創建了生產中不需要的打印結果。groovy.xml.MarkupBuilder禁用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) 
      } 
} 

此代碼生成:

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

但我不需要任何identation - 我只想要一個簡單的單行文本:)

回答

16

IndentPrinter可以採取三個參數:PrintWriter,縮進字符串,一個布爾addNewLines。你可以通過設置addNewLines爲false與空縮進字符串得到你想要的標記,像這樣:

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

結果:

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

'IndentPrinter'採用'Writer'作爲其第一個參數,而不是'PrintWriter'。所以你可以直接將'writer'傳遞給它,你沒有構造一個'PrintWriter'。 – Miscreant 2016-07-13 03:06:47

3

只看JavaDoc中有一方法IndentPrinter您可以在其中設置縮進級別,儘管它不會將它放在一行中。也許你可以編寫自己的Printer

+1

是的,我看到了 - 我可以禁用identation但換行符仍然存在。 – Oleksandr 2010-07-16 15:20:52

相關問題