Создайте Groovy XML с «конвертом» - добавьте узлы в середине структуры XML - PullRequest
2 голосов
/ 07 декабря 2009

(простите за странный заголовок ...)

Я хочу использовать систему Groovy Builder для создания 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')

Как должен выглядеть конструктор, чтобы я мог добавлять узлы с помощью разметки (или любого другого компоновщика) где-то посередине конверта?

Надеюсь, это было как-то понятно?!

СПАСИБО Marty

1 Ответ

6 голосов
/ 07 декабря 2009

Вы можете сделать это легко с замыканиями. Создайте замыкание для создания оболочки. Затем вы можете динамически передать закрытие, которое создает фактический контент. Пример:

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, который вы искали.

...