使用grails生成XML的好方法是什么

使用grails生成XML的好方法是什么,xml,grails,groovy,Xml,Grails,Groovy,简单的谷歌搜索看起来你应该使用“MarkupBuilder”,但我不明白。看起来我已经完成了导入grails.converters.XML的工作,可以“像XML一样”,但这并没有真正满足我的需求 我想要这个: <Thingie> <someValue>blah</someValue> <hellaItems> <Item> <anotherValue>yaddayadda</anotherV

简单的谷歌搜索看起来你应该使用“MarkupBuilder”,但我不明白。看起来我已经完成了导入grails.converters.XML的
工作,可以“像XML一样”,但这并没有真正满足我的需求

我想要这个:

<Thingie>
  <someValue>blah</someValue>
  <hellaItems>
    <Item>
      <anotherValue>yaddayadda</anotherValue>
    </Item>
    <Item>
      <anotherValue>different from the first</anotherValue>
    </Item>
  </hellaItems>

</Thingie> 
更新:看起来我快到了,但是有人能帮我完成最后一部分吗。我正在这样做:

def items = ["yaddayadda","different from the first"]
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.thingie() {
  someValue('blah')
  hellaItems(){
      items.each{
          item(){
              anotherValue(it)
           }
      }


  }
}
def xmlString = writer.toString()
println "maybe this will just work"
println xmlString
印刷品:

maybe this will just work
<thingie>
  <someValue>blah</someValue>
  <hellaItems>
    <item>
      <anotherValue />
    </item>
    <item>
      <anotherValue />
    </item>
  </hellaItems>
</thingie>
writer.toString()


你还不明白什么?语法有点奇怪,但那是因为它是DSL。它不应该看起来像普通的groovy“代码”<代码>因为XML的工作方式截然不同,除非您的对象图与您发布的XML完全匹配,否则您将无法获得所需的结果。

基本上,如果您需要对生成的XML进行细粒度控制,请使用
MarkupBuilder
。如果您想以默认方式将一个对象(图形)序列化为XML,即所有属性都包含在标记中,那么请随意使用
someObject作为XML

我认为我无法理解这个答案,直到它有项。每个{}都在某个地方。显然,我比我想象的要聪明。您不应该需要方法调用()在这些元素的末尾有parens。你很接近,但我不会使用“it”,特别是如果你有另一个闭包在里面。试试items.each{txt->item(){anotherValue(txt)}}?是的,这比tmpHolder好得多。我还在学着适应。
maybe this will just work
<thingie>
  <someValue>blah</someValue>
  <hellaItems>
    <item>
      <anotherValue />
    </item>
    <item>
      <anotherValue />
    </item>
  </hellaItems>
</thingie>
def items = ["yaddayadda","different from the first"]
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.thingie() {
  someValue('blah')
  hellaItems(){
      items.each{
          def tmpHolder = it
          item(){
              anotherValue(tmpHolder)
           }
      }


  }
}
def xmlString = writer.toString()
println "maybe this will just work"
println xmlString
import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.thingie() {
  someValue('blah')
  hellaItems(){
     item(){
        anotherValue('yaddayadda')
     }
     item(){
        anotherValue('different from the first')
     }
  }
}