groovy创建新的xml节点

时间:2016-04-05 00:14:16

标签: xml groovy

我想创建一个简单的xml节点,然后查看http://docs.groovy-lang.org/latest/html/api/groovy/util/Node.html中的文档并编写这些代码。

    def newbook = new Node(null, 'book', [id:'3'])
    newbook.appendNode(new Node(newbook,'title',[id:'BookId3']))
    newbook.appendNode(new Node(newbook,'author',[id:'3'],'Harper Lee'))

    println groovy.xml.XmlUtil.serialize(newbook)

但输出是

<?xml version="1.0" encoding="UTF-8"?><book id="3">
  <title id="BookId3"/>
  <title/>
  <author id="3">Harper Lee</author>
  <author/>
</book>

在我看来,有两个标题标签和作者标签被创建。为什么?

我也试过

    def newbook = new Node(null, 'book', [id:'3'])
    newbook.appendNode(new QName('title'),'BookId3')
    newbook.appendNode(new QName('author'),[id:'3'],'Harper Lee')
    println groovy.xml.XmlUtil.serialize(newbook)

输出

<?xml version="1.0" encoding="UTF-8"?><book id="3">
  <title xmlns="">BookId3</title>
  <author xmlns="" id="3">Harper Lee</author>
</book>

现在它看起来不错,但有没有办法删除命名空间?

理想情况下,我希望有类似的东西

<book id="3">
  <title>BookId3</title>
  <author id="3">Harper Lee</author>
</book>

然后在replaceNode()方法中使用它

1 个答案:

答案 0 :(得分:6)

使用Groovy 2.4.5,这个:

import groovy.util.*

def newbook = new Node(null, 'book', [id:'3'])

new Node(newbook,'title',[id:'BookId3'])
new Node(newbook,'author',[id:'3'],'Harper Lee')

println groovy.xml.XmlUtil.serialize(newbook)

得出这个:

<?xml version="1.0" encoding="UTF-8"?><book id="3">
  <title id="BookId3"/>
  <author id="3">Harper Lee</author>
</book>

可能不是很明显,但仔细阅读the doc的Node构造函数会发现它将节点添加到父节点。