groovy创建新的xml节点

T_Y*_*T_Y 2 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)
Run Code Online (Sandbox Code Playgroud)

但输出是

<?xml version="1.0" encoding="UTF-8"?><book id="3">
  <title id="BookId3"/>
  <title/>
  <author id="3">Harper Lee</author>
  <author/>
</book>
Run Code Online (Sandbox Code Playgroud)

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

我也试过了

    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)
Run Code Online (Sandbox Code Playgroud)

输出是

<?xml version="1.0" encoding="UTF-8"?><book id="3">
  <title xmlns="">BookId3</title>
  <author xmlns="" id="3">Harper Lee</author>
</book>
Run Code Online (Sandbox Code Playgroud)

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

理想情况下,我希望有这样的东西

<book id="3">
  <title>BookId3</title>
  <author id="3">Harper Lee</author>
</book>
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ter 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)
Run Code Online (Sandbox Code Playgroud)

得出这个:

<?xml version="1.0" encoding="UTF-8"?><book id="3">
  <title id="BookId3"/>
  <author id="3">Harper Lee</author>
</book>
Run Code Online (Sandbox Code Playgroud)

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