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