2011-08-12 28 views
1

我遇到了使用XMLSlurper更新XML文檔的麻煩。大多數情況下都能正常工作,但在某些情況下,「find」找不到我剛添加的節點(appendNode)。新節點是在有處理結束,但是當我在加入孩子們的中間是找不到的。XMLSlurper appendNode沒有看到更改

我發現了一個大約的XmlSlurper後,指出尋找新的節點需要再次調用parseText和/或StreaMarkupBuilder(見下文)。真?!這似乎很笨拙,我認爲我會在SO上進行驗證。

這裏是一個代碼段。即使Node剛添加,「find」也會獲得NoChildren。

codeNode.appendNode { 
    'lab:vendorData'() {} 
} 
vendorNode = codeNode.children().find { it.name() == "vendorData" } 

「appendNode doea不能直接修改的咕嚕咕嚕的文件,在編輯應用‘對飛’當文檔被寫出來使用StreamingMarkupBuilder。」 http://markmail.org/message/5nmxbhwna7hr5zcq#query:related%3A5nmxbhwna7hr5zcq+page:1+mid:bkdesettsnfnieno+state:results

爲什麼我找不到我的新節點?

+0

的你發現的郵件列表後是正確的 –

回答

0

這是我得到了什麼工作。是不是優雅,但有過去的「更新」的問題:

... 
codeNode.appendNode { 
    'lab:vendorData'() {} 
} 
//-- must re-slurp to see appended node 
labDoc = new XmlSlurper().parseText(serializeXml(labDoc)) 
codeNode = getResultNodeFor(nextResult.getCode()); 
vendorNode = codeNode.children().find { it.name() == "vendorData" } 
... 
def String serializeXml(GPathResult xml){ 
XmlUtil.serialize(new StreamingMarkupBuilder().bind { 
     mkp.declareNamespace("lab", "www.myco.com/LabDocument") 
     mkp.yield labDoc 
    }) 

}

+1

「mkp.yield XML」的,而不是labDoc? – yihtserns

相關問題