混合Groovy MarkupBuilder与转换器

| 我正在尝试将XML转换器创建的XML片段注入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\"?>
是否有更时髦的方式来实现这一目标?
已邀请:
更简单的方法是将would4ѭ直接传递给
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 MarkupBuilder编写自己的XML转换器。
 xml.response {
    status (\"OK\")
    def xmlist = myList as XML
    xml.mkp.yieldUnescaped (xmlist.toString() - \"&lt;?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?&gt;\")
}

要回复问题请先登录注册