Какой хороший способ сделать XML с помощью Grails
Краткий поиск в Google выглядит так, как будто вы должны использовать "MarkupBuilder", но я этого не понимаю. Похоже, я могу сделать "как XML", сделав import grails.converters.XML
но это на самом деле не дает мне то, что я хочу.
Я хочу этот:
<Thingie>
<someValue>blah</someValue>
<hellaItems>
<Item>
<anotherValue>yaddayadda</anotherValue>
</Item>
<Item>
<anotherValue>different from the first</anotherValue>
</Item>
</hellaItems>
</Thingie>
Я даже не знаю с чего начать...
@ Стефан, что если я хочу сделать это динамически? Я не думаю, что понимаю, что "строители" вообще могут быть проблемой.
def items = ["yaddayadda","different from the first"]
Обновление: похоже, я уже близко, но может кто-нибудь помочь мне с этой последней частью. Я делаю это:
def items = ["yaddayadda","different from the first"]
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.thingie() {
someValue('blah')
hellaItems(){
items.each{
item(){
anotherValue(it)
}
}
}
}
def xmlString = writer.toString()
println "maybe this will just work"
println xmlString
печатает:
maybe this will just work
<thingie>
<someValue>blah</someValue>
<hellaItems>
<item>
<anotherValue />
</item>
<item>
<anotherValue />
</item>
</hellaItems>
</thingie>
Почему не мой anotherValue
там?
ОБНОВЛЕНИЕ: РЕШЕНО с использованием "tmpHolder" ниже, однако у Билла есть лучший синтаксис.
def items = ["yaddayadda","different from the first"]
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.thingie() {
someValue('blah')
hellaItems(){
items.each{
def tmpHolder = it
item(){
anotherValue(tmpHolder)
}
}
}
}
def xmlString = writer.toString()
println "maybe this will just work"
println xmlString
2 ответа
import groovy.xml.MarkupBuilder
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.thingie() {
someValue('blah')
hellaItems(){
item(){
anotherValue('yaddayadda')
}
item(){
anotherValue('different from the first')
}
}
}
writer.toString()
Что ты не получишь? Синтаксис немного странный, но это потому, что это DSL. Это не должно выглядеть как обычный "код". as XML
работает совсем по-другому, и если ваш объектный граф не будет точно соответствовать XML, который вы опубликовали, вы не получите желаемых результатов.
По сути, если вам нужен детальный контроль над сгенерированным XML, используйте MarkupBuilder
, Если вы хотите сериализовать в XML объект (граф) способом по умолчанию, т.е. все свойства включены в разметку, то не стесняйтесь использовать someObject as XML