我了解如何使用 MarkupBuilder 在 Groovy 中创建 XML。在初始创建后,如何将元素添加/插入到 MarkupBuilder 对象中?例如,开始:

def builder = new MarkupBuilder(writer)
  def items = builder.items{
        item(name: "book")
  }

这将产生:
<items>
   <item name="book/>
 </items>

我正在尝试创建一个可扩展的基本 XML 消息,使用核心类来包装构建器和继承以添加特定标签。基于上面的例子,这是我的基类:
Class ItemBuilder{
   def name;
   def builder = new MarkupBuilder(writer)
   public Object getXML(){
     def items = builder.items{
            item(name: this.name)
      }
     return items;
   }
}

这是一个示例扩展消息生成器:
Class SubItemBuilder extends ItemBuilder{
       def type;

       public Object getXML(){
         def items = super.getXML();
         //do something here to add a subitem child tag....
         return items;
       }
    }

如果我在 JavaScript 中使用 JSON,我会这样做:
items.item.subitem = "foo"

我最终希望 SubItemBuilder.getXML 生成:
<items>
     <item name="book>
       <subitem type="paperback"/>
      </item>
 </items>

有什么简单的方法可以实现这一目标吗?似乎一种选择是继承 MarkupBuilder 并添加公共(public)方法来插入子节点。有没有更好的方法来实现我正在寻找的结果?

最佳答案

使用 MarkupBuilder for Agile XML Creation 的食谱示例展示了如何创建接近我需要的东西。

例如:

import groovy.xml.MarkupBuilder

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

def subitem (builder){
    builder.subitem(type: "paperback")
}


def items = builder.items{
    item(name: "book")
    subitem(builder)
}

println writer.toString()​

关于xml - 初始创建后将元素添加/插入到 Groovy MarkupBuilder 对象中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1469361/

10-10 17:29