我想创建一个简单的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()方法中使用它
答案 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构造函数会发现它将节点添加到父节点。