1

我需要生成一些包含名为“属性”的元素的 xml。当我尝试以下操作时,我注意到 groovy 正在尝试获取我的类的属性,正如它对getSomething. 相反,它应该只生成一个名为“properties”的元素。

class XMLGen
{
    public String getSomething() {
        println "Got something"
    }

    public String genXml()
    {
        def myProps = ['a':1, 'b':2]

        def xml = new groovy.xml.StreamingMarkupBuilder().bind{
            rootTag{
                properties{ // ???
                    myProps.each{ prop ->
                        property(key: prop.key, value: prop.value)
                    }
                }
            }
        }
        return groovy.xml.XmlUtil.serialize(xml)
    }
}

println new XMLGen().genXml()

输出:

Got something
<?xml version="1.0" encoding="UTF-8"?><rootTag>
  <properties>
    <property key="a" value="1"/>
    <property key="b" value="2"/>
  </properties>
</rootTag>

我将如何明确地“告诉”groovy 将在线方法调用(标记为???)传递给标记生成器?

(问这个问题并自己回答,因为我在任何地方都找不到解决方案,但最终“猜到”了正确的答案)

4

1 回答 1

1

解决方法是在“properties”前加上“delegate”,如下:

delegate.properties{ // ???

您还可以向bind闭包添加参数并调用.properties它,如下所示:

def xml = new groovy.xml.StreamingMarkupBuilder().bind{ smb ->
    ...
    smb.properties{ // ???
于 2013-04-04T21:04:12.017 回答