1

「プロパティ」という要素を含む xml を生成する必要があります。次のことを試みると、 への呼び出しによって証明されるように、groovy がクラスのプロパティを取得しようとしていることに気付きますgetSomething。代わりに、「プロパティ」という名前の要素のみを生成する必要があります。

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

解決策は、以下のように「プロパティ」の前に「デリゲート」を追加することです。

delegate.properties{ // ???

bind以下のように、パラメーターをクロージャーに追加.propertiesして代わりに呼び出すこともできます。

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