2016-04-05 117 views
1

我想創建一個簡單的XML節點,我看着http://docs.groovy-lang.org/latest/html/api/groovy/util/Node.html的文檔並編寫這些代碼。groovy創建新的XML節點

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()方法

回答

2

使用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構造函數,發現它將節點添加到父級。

+0

是的,你基本上增加了兩個節點。一個帶有這些字段的構造函數,另一個帶有它決定的名稱,它是沒有屬性或值的「標題」或「作者」。 –