重构groovy html markupbuilder

重构groovy html markupbuilder,groovy,groovyshell,markupbuilder,Groovy,Groovyshell,Markupbuilder,我最近学习了groovy脚本,所以我还是一个初学者 (我也是一名专业的C语言程序员,对Java有一些概念) 我使用MarkupBuilder成功地创建了一个有效的html页面(参见下面的简化示例) 一切都很好,只是现在“主体”部分变得相当大,我有一些代码重复,所以它确实需要重构。 通过重构,我的意思是我想把部分放在函数/过程中,并在“body”中重复调用它 我试着效仿这个例子 认为它可以和XML一样使用HTML标记。 编辑:它确实有效 例如,如果我做了类似的事情 def my_procedur

我最近学习了groovy脚本,所以我还是一个初学者 (我也是一名专业的C语言程序员,对Java有一些概念) 我使用MarkupBuilder成功地创建了一个有效的html页面(参见下面的简化示例)

一切都很好,只是现在“主体”部分变得相当大,我有一些代码重复,所以它确实需要重构。 通过重构,我的意思是我想把部分放在函数/过程中,并在“body”中重复调用它

我试着效仿这个例子

认为它可以和XML一样使用HTML标记。 编辑:它确实有效

例如,如果我做了类似的事情

def my_procedure(builder)
{
   builder.a 
   {
        mkp.yield("Hello html")
   }
}

编辑:如果不在过程中写入builder.a,而只写入“a”,则执行失败

谢谢,
Clement

在groovy 2.4.5中,它会返回正确的结果。您可能还对。它允许您定义一个包含实用程序方法的基模板类,但速度要快得多。@Opal my bad,我在文章中做对了,但在代码中错了(缺少一个builder.td),因此我编辑了文章以反映这一点。谢谢你的建议。我在网上看到了一些关于使用模板的内容,但对我来说似乎有点太高级了,对吧now@CMFR你希望它如何工作?您需要在某些上下文中调用
a
。所以
builder.a
就可以了,或者
builder.with{a//some code}
@CMFR,所以请提供一个示例来说明真正的问题。对于groovy 2.4.5,它返回正确的结果。您可能还对。它允许您定义一个包含实用程序方法的基模板类,但速度要快得多。@Opal my bad,我在文章中做对了,但在代码中错了(缺少一个builder.td),因此我编辑了文章以反映这一点。谢谢你的建议。我在网上看到了一些关于使用模板的内容,但对我来说似乎有点太高级了,对吧now@CMFR你希望它如何工作?您需要在某些上下文中调用
a
。所以
builder.a
就可以了,或者
builder.with{a//some code}
@CMFR就可以了,所以请提供一个例子来说明真正的问题。
def my_procedure(builder)
{
   builder.a 
   {
        mkp.yield("Hello html")
   }
}
def writer = new StringWriter()
def page_html = new groovy.xml.MarkupBuilder(writer)
page_html.html
{
    head
    {
        title("Test HTML table")
    }
    body
    {
        h3("Test HTML")
        my_procedure(page_html)
    }
}
writer.toString()