2016-11-24 69 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

哈! “简单”是我一直在寻找:)我没有意识到,取代节点值删除子节点。谢谢! –