首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串呈现MarkupBuilder

从字符串呈现MarkupBuilder
EN

Stack Overflow用户
提问于 2011-10-12 12:55:56
回答 1查看 1K关注 0票数 2

我正在使用MarkupBuilder从标记库中呈现一些超文本标记语言,如下所示(为清晰起见进行了简化):

代码语言:javascript
复制
def formContainer = new MarkupBuilder(out)
formConainer.form() {
   input() { }
   input() { }
}

现在假设在form()中的某个地方,我想拉入一些由用户指定的元素,因此在文件系统的文件中,我有如下所示(同样,简化)……

代码语言:javascript
复制
select() {
  option()
  option()
}

我的问题是,如果我将select作为字符串读取,那么标记库是否可以将其解析为groovy并使其成为MarkupBuilder实例的一部分?

代码语言:javascript
复制
def formContainer = new MarkupBuilder(out)
formConainer.form() {
   input() { }
   input() { }

   // I want the select to render here
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-12 16:59:15

执行此操作的一种方法是:

代码语言:javascript
复制
String externalMarkup = '''
select() {
  option()
  option()
}
'''
def out = new StringWriter()

def formContainer = new groovy.xml.MarkupBuilder( out )
formContainer.form() {
   input()
   input()

   // Wrap the string in { -> ... } to make it a closure, and evaluate it
   def extern = new GroovyShell().evaluate( "{ it-> ${externalMarkup} }" )
   // Set the delegate of this closure to the MarkupWriter
   extern.delegate = formContainer
   // Then execute the closure
   extern()
}
println out.toString()

然而,对我来说这感觉很脆弱...

一种更好的方法可能是使用GroovyTemplateEngine将您的值注入到格式化的完整标记中

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7735420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档