2011-04-20 30 views
1

我正在嘗試將由XML轉換器創建的XML片段注入到MarkupBuilder中。將Groovy MarkupBuilder與轉換器混合使用

但是我不能得到格式正確,並且好像有不必要的中間序列化步驟。

import grails.converters.XML 
import groovy.xml.MarkupBuilder 

//... 

def writer = new StringWriter() 
def xml = new MarkupBuilder (writer) 
xml.response { 
    status ("OK") 
    myList.each { it as XML } //Insert objects by converting to XML 
} 
println writer.toString() 

所需的輸出將

<response> 
    <status>OK</status> 
    <foo> 
    <field>5</field> 
    </foo> 
    <foo> 
    <field>5</field> 
    </foo> 
</response> 

我現在的嘗試是這個

def writer = new StringWriter() 
def xml = new MarkupBuilder (writer) 
xml.response { 
    status ("OK") 
    myList.each { 
    xml.mkp.yieldUnescaped (it as XML) 
    } 
} 
println writer.toString() 

但是目前每個XML片段是由

<?xml version="1.0" encoding="UTF-8"?> 

preceeded有沒有一種更巧妙的通向做到這一點?

回答

2

更方便的方法是將writer直接傳遞給XML類的render方法,如下所示。

def writer = new StringWriter() 
def xml = new MarkupBuilder (writer) 
xml.response { 
    status ("OK") 
    def xmlist = myList as XML 
    xmlist.render(writer) 
}  

你仍然有編碼信息的一個時間雖然因爲render只是其寫入傳遞的任何writer

我看到2個選項,以擺脫這種編碼信息:

  • 獲取XML的字符串表示形式,並取消編碼信息(可以改進)
  • 使用Groovy編寫自己的XML轉換器如在article中解釋的。

xml.response { 
    status ("OK") 
    def xmlist = myList as XML 
    xml.mkp.yieldUnescaped (xmlist.toString() - "&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;") 
}