xml - 在初始创建后将元素添加/插入到 Groovy MarkupBuilder 对象中

标签 xml dom groovy markup

我了解如何使用 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/

相关文章:

javascript - 如果 id 匹配则删除标签但保留文本

javascript - 如何从JavaScript访问Grails对象的Arraylist

groovy 读取文件获取某些行,然后将每个检索到的行拆分为多个部分

java - 如何将带有ID属性的doctype添加到java中的XML文件中?

xml - 更改特定属性的值

javascript - 监听 DOM 初始加载后渲染的元素

jenkins - FileNameFinder().getFileNames 在一个 Jenkins 节点上失败

java - ParentBottom View 的 View.Gone 导致问题

java - 将空标签解码到集合的新实例中

python - 使用 lxml 的 iterparse 抓取 &lt;title&gt; 标签