为什么不能将子项添加到appendNode()创建的节点?

时间:2014-05-15 01:46:31

标签: xml groovy

我想创建一个像这样的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>

有谁能告诉我什么是错的?

1 个答案:

答案 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是什么意思?