Теги разметки Groovy

Есть ли способ изменить код из предыдущего ответа

import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def builder = new MarkupBuilder(writer)

def awaiting = ['one', 'two', 'three']

builder.html {
    ul {
        awaiting.each { 
            li(it.toString())
        }
    }
}

println writer.toString()

так что если вы добавите тег вместо того, чтобы отправить его, например

    builder.html{
tag{
    awaiting.each{}
    }
} return result

может быть, например, «ол» или «ул»


person john renfrew    schedule 18.06.2010    source источник


Ответы (2)


Вы можете положиться на GStrings и тот факт, что вы можете вызывать функцию по ее строковому значению.

import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def builder = new MarkupBuilder(writer)

def awaiting = ['one', 'two', 'three']
def tag = 'ol'

builder.html {
    "$tag" {
        awaiting.each { 
            li(it.toString())
        }
    }
}

println writer.toString()
person gizmo    schedule 18.06.2010
comment
Звезда.. Я знал, что будет далеко, но, как всегда, первые шаги, кажется, требуют много времени, чтобы впитаться... - person john renfrew; 18.06.2010

Вы также можете использовать invokeMethod, который является более явным, чем приведенный выше, хотя и немного длиннее.

builder.html {
  invokeMethod(tag) {
    awaiting.each { 
      li it
} } }
person hlg    schedule 22.06.2010