2014-05-15 45 views
0

我想創建這樣一個xml:爲什麼不能將子項添加到由appendNode()創建的節點?

<root> 
    <level1> 
    <levl2/> 
    </level1> 
</root> 

這裏是我的Groovy代碼:

def root="<root/>" 
def l1 = "<level1/>" 
def l2 = "<level2/>" 

def dom = new XmlSlurper(false, false).parseText(root) 
dom.appendNode(new XmlSlurper().parseText(l1)) 
dom.level1.appendNode(new XmlSlurper().parseText(l2)) 
def sw = new StringWriter() 
XmlUtil.serialize(dom, sw) 
println sw.toString() 

我的代碼的實際結果是這樣的:

<root> 
    <level1/> 
</root> 

任何人都可以告訴我出了什麼事?

回答

1

因爲appendNode()總是附加在文檔的末尾,所以您不需要指定最後一個節點。在你的榜樣,因爲l2已被添加爲孩子l1所以使用leftShift將是一個更容易的選擇:

def root="<root/>" 
def l1 = "<level1/>" 
def l2 = "<level2/>" 

def dom = new XmlSlurper(false, false).parseText(root) 

dom << (new XmlSlurper().parseText(l1) << new XmlSlurper().parseText(l2)) 

def sw = new StringWriter() 
XmlUtil.serialize(dom, sw) 
println sw.toString() 

是否有任何理由,你不能像這樣使用:

dom.root { 
    level1 { 
     level2 { } 
    } 
} 

通常情況下,

def swr = new StringWriter() 
def markup = new groovy.xml.MarkupBuilder(swr) 
markup.root { 
    level1 { 
     level2 { } 
    } 
} 


println swr 

有什麼打算在這裏使用appendNode:它使用MarkupBuilder的作爲呢?

+0

這是結果使用代碼: eric2323223

+0

@ eric2323223是的,我沒有意識到的是,在預期的XML level2的應該是1級的孩子。使用'<<'查看我的更新,你會得到預期的結果。你還可以解釋爲什麼你不喜歡MarkupBuilder這個,只是好奇嗎? :) – dmahapatro

+0

我需要創建一個像XML一樣的表,行和列是動態生成的。 – eric2323223

相關問題