Eri*_*ine 4 xml markup groovy dom
我理解如何使用MarkupBuilder在Groovy中创建XML.在初始创建后如何向MarkupBuilder对象添加/插入元素?例如,从以下开始:
def builder = new MarkupBuilder(writer)
def items = builder.items{
item(name: "book")
}
Run Code Online (Sandbox Code Playgroud)
哪会产生:
<items>
<item name="book/>
</items>
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个可扩展的基本XML消息,使用核心类来包装构建器和继承以添加特定标记.基于上面的例子,这是我的基类:
Class ItemBuilder{
def name;
def builder = new MarkupBuilder(writer)
public Object getXML(){
def items = builder.items{
item(name: this.name)
}
return items;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个示例扩展消息构建器:
Class SubItemBuilder extends ItemBuilder{
def type;
public Object getXML(){
def items = super.getXML();
//do something here to add a subitem child tag....
return items;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在JavaScript中使用JSON,我会做类似的事情:
items.item.subitem = "foo"
Run Code Online (Sandbox Code Playgroud)
我最终希望SubItemBuilder.getXML生成:
<items>
<item name="book>
<subitem type="paperback"/>
</item>
</items>
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法来实现这一目标?看起来像一个选项是子类MarkupBuilder并添加公共方法来插入子节点.有没有更好的方法来实现我正在寻找的结果?
使用MarkupBuilder进行Agile XML Creation的cookbook示例演示了如何创建接近我需要的东西.
例如:
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()?
Run Code Online (Sandbox Code Playgroud)