Groovy MarkupBuilder

У меня есть список вещей, каждая из которых может быть foo или бар. Я хочу создать XML, который выглядит следующим образом:

<rdf:RDF>
  <foo id="1">
  <foo id="2">
  <bar id="3">
</rdf:RDF>

Итак, я получил это далеко:

MarkupBuilder xml = new MarkupBuilder(writer)
  xml.'rdf:RDF' (nsmap) { }

Но сейчас я застрял. Как я - в этом xml.'rdf:RDF' (nsmap) { } закрытие - перебрать мой список вещей? Как я - внутри этого итератора - выплюнуть элемент foo или bar, если применимо?

3 ответа

Это проще, как вы думаете. Включите цикл в закрытие xml и, в свою очередь, включите разметку в цикл. Этот скрипт...

import groovy.xml.MarkupBuilder

things = ['foo','foo','bar']
writer = new StringWriter()

xml = new MarkupBuilder(writer)
xml.'rdf:RDF' {
    things.eachWithIndex {thing,index ->
        "$thing" id:index+1
    }
}

println writer

... выдаст следующий вывод:

<rdf:RDF>
  <foo id='1' />
  <foo id='2' />
  <bar id='3' />
</rdf:RDF>

Ну вот:

import groovy.xml.MarkupBuilder
import org.custommonkey.xmlunit.*

def data = [foo:1,bar:2,baz:3]

def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.'rdf:RDF' {
    data.each { e ->
        "$e.key"(id:e.value)
    }
}
println writer

Хорошо.

Проблема заключается в том, что когда замыкатель запускается компоновщиком, он работает в контексте компоновщика. Теперь выясняется, что контекст компоновщика скрывает методы, но не скрывает переменные. Это означает, что вы можете создать замыкание, назначить его переменной и получить доступ к нему из компоновщика.

Теперь у меня сложилось впечатление, что это замыкание тоже работает в контексте компоновщика. Но я подозреваю, что вы можете присвоить "this" переменной вне замыканий, а затем получить доступ к этой переменной, чтобы получить контекст обратно.

Смешно, что тебе приходится идти на такие неприятности. Мне напомнили о кодировании в Microsoft Access, еще в 90-х. Он прекрасно работает до того момента, когда вы захотите сделать что-то большее, чем это было строго разработано.

Другие вопросы по тегам