首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy MarkupBuilder与转换器的混合

Groovy MarkupBuilder与转换器的混合
EN

Stack Overflow用户
提问于 2011-04-20 05:47:28
回答 1查看 1.1K关注 0票数 1

我正在尝试将由XML转换器创建的XML片段注入MarkupBuilder。

但是,我无法获得正确的格式设置,而且似乎存在不必要的中间序列化步骤。

代码语言:javascript
复制
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()

所需产出将是

代码语言:javascript
复制
<response>
  <status>OK</status>
  <foo>
     <field>5</field>
  </foo>
  <foo>
     <field>5</field>
  </foo>
</response>

我目前的尝试是

代码语言:javascript
复制
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片段都由

代码语言:javascript
复制
  <?xml version="1.0" encoding="UTF-8"?>

有更好的方法来实现这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2011-04-21 12:13:18

更好的方法是将writer直接传递给XML类的render方法,如下所示。

代码语言:javascript
复制
def writer = new StringWriter ()
def xml = new MarkupBuilder (writer)
xml.response {
   status ("OK")
   def xmlist = myList as XML
   xmlist.render(writer)
}      

不过,您仍然有一次编码信息,因为render只是将其写入传入的任何writer

我看到了两个处理这些编码信息的选项:

  • 获取XML的字符串表示形式,并删除如下所示的编码信息(可以改进)
  • 使用Groovy编写自己的MarkupBuilder转换器,如本文章所解释的那样。
代码语言:javascript
复制
 xml.response {
    status ("OK")
    def xmlist = myList as XML
    xml.mkp.yieldUnescaped (xmlist.toString() - "&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;")
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5726058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档