2010-07-16 3 views
7

groovy.xml.MarkupBuilder를 사용하여 XML 응답을 만들었지 만 프로덕션 환경에서는 불필요한 결과가 생성됩니다.groovy.xml.MarkupBuilder disable PrettyPrint

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

하지만 난 어떤 identation 필요하지 않습니다 -이 난 그냥 평범한 한 행 텍스트 :

답변

16

IndentPrinter는 세 개의 매개 변수를 취할 수하십시오 PrintWriter, 들여 쓰기 문자열 및 부울 addNewLines합니다. 당신과 같이, 빈 들여 쓰기 문자열로 false로 addNewLines을 설정하여 원하는 마크 업을 얻을 수 있습니다 :

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

결과 : - 내가 identation하지만 줄 바꿈을 비활성화 할 수

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

'IndentPrinter'는 PrintWriter가 아니라 첫 번째 매개 변수로 Writer를 사용합니다. 그래서 당신은'writer'를 직접 전달할 수 있습니다. 당신은'PrintWriter'를 만들지 않습니다. – Miscreant

3

는 그냥 JavaDoc을보고 원하는 :

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

이 코드는 생산 메소드 IndentPrinter에 들여 쓰기 레벨을 설정할 수 있습니다. 단 한 줄에 모두 들여 쓰기하지는 않습니다. 아마 당신이 쓸 수있는 자신의 Printer

+1

네를, 나는 보았다 여전히 존재합니다. – Oleksandr

관련 문제