2016-11-24 127 views
1

所以我看起來像一個非常常見和簡單的任務:給定一個Groovy節點(來自XmlParser),我想刪除它的所有子節點。從Groovy xml節點中刪除所有的孩子

原來並不那麼簡單。我能想到的大多數方法都會導致ConcurrentModificationException。即使使用迭代器也沒有幫助,這對我來說是令人驚訝的。

我設法做到這一點的唯一方法是先將所有孩子複製到一個新列表中,然後迭代該列表。事情是這樣的:

def children = [] 
children.addAll(node.children()) 
children.each { node.remove(it) } 

是不是還有更好的,更巧妙的辦法做到這一點?

+0

你有沒有嘗試設置node.value = 「」? –

回答

2

可能太簡單了,但我認爲你可以將節點的值設置爲空字符串。

import groovy.xml.* 

def xml = "<parent><child>Child</child><another>One</another></parent>" 

def node = new XmlParser().parseText(xml) 

node.value = "" 

println XmlUtil.serialize(node) 

<parent/>

+0

哈! 「簡單」是我一直在尋找:)我沒有意識到,取代節點值刪除子節點。謝謝! –