我想创建一个像这样的xml:
<root>
<level1>
<levl2/>
</level1>
</root>
这是我的常规代码:
def root="<root/>"
def l1 = "<level1/>"
def l2 = "<level2/>"
def dom = new XmlSlurper(false, false).parseText(root)
dom.appendNode(new XmlSlurper().parseText(l1))
dom.level1.appendNode(new XmlSlurper().parseText(l2))
def sw = new StringWriter()
XmlUtil.serialize(dom, sw)
println sw.toString()
我的代码的实际结果如下:
<root>
<level1/>
</root>
有谁能告诉我什么是错的?
答案 0 :(得分:1)
由于appendNode()
始终附加在文档的末尾,因此您无需指定最后一个节点。在您的示例中,由于l2
必须作为子项添加到l1
,因此使用leftShift
将是一个更简单的选项:
def root="<root/>"
def l1 = "<level1/>"
def l2 = "<level2/>"
def dom = new XmlSlurper(false, false).parseText(root)
dom << ( new XmlSlurper().parseText( l1 ) << new XmlSlurper().parseText( l2 ) )
def sw = new StringWriter()
XmlUtil.serialize(dom, sw)
println sw.toString()
你有什么理由不能这样使用:
dom.root {
level1 {
level2 { }
}
}
通常,使用MarkupBuilder完成:
def swr = new StringWriter()
def markup = new groovy.xml.MarkupBuilder(swr)
markup.root {
level1 {
level2 { }
}
}
println swr
使用appendNode是什么意思?