如何在运行时指定StreamingMarkupBuilder标记名称?

时间:2013-04-12 14:43:19

标签: xml groovy

我正在尝试使用StreamingMarkupBuilder构建XML文档。我不知道元素的标记名称是什么,直到运行时,所以我试图找到一种方法在StreamingMarkupBuilder.bind()中指定它。我已经看到了如何指定元素属性和值,但不是标记名称。有什么想法吗?

def xmlBuilder = new StreamingMarkupBuilder()

def xmlString = xmlBuilder.bind {
    root {
        for (MyClass obj : MyClass.list()) {
            obj.getTagName(myValue)
        }
    }
}.toString()

return xmlString

我想要得到的东西:

<root>
    <FoundTagName>myValue</FoundTagName>
</root>

修改

这是我最终的结果:

MyClass.list().each { f ->
    "$f.tagName"(f.getValue())
}

我认为值得注意的是,在双引号中我使用了属性名而不是方法名。

1 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

import groovy.xml.*

def values = [ tim:12, apples:'yum' ]

String xmlString = new StreamingMarkupBuilder().bind {
  root {
    values.each { k, v ->
      "$k"( v )
    }
  }
}

assert xmlString == '<root><tim>12</tim><apples>yum</apples></root>'

显然,我使用地图作为我的价值观,但你应该能够以类似的方式使用你的课程(无论是什么)...