2

(変なタイトルですみません…)

Groovy ビルダー システムを使用して xml を作成したいと考えています。

私の問題は、ユーザーが気にする必要のない、ある種のエンベロープを持ちたいということです。

例:

def builder = new groovy.xml.MarkupBuilder()
builder.foo() {
     bar('hello')
}

これは作成する必要があります

<Something id:'123'>
    <AnyInfo>
        <foo>
            <bar>hello</bar>
        </foo>
    </AnyInfo>
</Something>

バックグラウンドで xml 構造が存在するように、ユーザーは自分の xml 構造を定義済みのノードに追加できます (例では 'AnyInfo')。

エンベロープの真ん中のどこかに markupbuilder (または他のビルダー) でノードを追加できるように、ビルダーはどのように見える必要がありますか?

これがなんとなく理解できたと思いますか?

ありがとうマーティ

4

1 に答える 1

6

これは、クロージャーを使用して簡単に行うことができます。クロージャーを作成してラッパーを作成します。その後、実際のコンテンツを作成するクロージャーを動的に渡すことができます。例:

def writer = new StringWriter()
def builder = new groovy.xml.MarkupBuilder(writer)

def createWrapper = {Closure c->
    builder.Something(id:123) {
        AnyInfo() {
            c()
        }
    }
}

createWrapper {
    builder.foo() {
        bar('hello')
    }
}

println writer.toString()

これによって作成された結果が、探していたサンプル XML です。

于 2009-12-07T12:55:37.533 に答える