2011-04-13 65 views
1

我有一个XML结构如下:如何使用java中的jdom从节点中删除孩子?

<rurl modify="0" children="yes" index="8" name="R-URL"> 
    <status>enabled</status> 
    <rurl-link priority="3">http</rurl-link> 
    <rurl-link priority="5">http://localhost:80</rurl-link> 
    <rurl-link priority="4">abc</rurl-link> 
    <rurl-link priority="3">b</rurl-link> 
    <rurl-link priority="2">a</rurl-link> 
    <rurl-link priority="1">newlinkkkkkkk</rurl-link> 
</rurl> 

现在,我想删除一个子节点,其中文本等于HTTP。目前我正在使用此代码:

while(subchilditr.hasNext()){ 
    Element subchild = (Element)subchilditr.next(); 
    if (subchild.getText().equalsIgnoreCase(text)) { 
     message = subchild.getText(); 
     update = "Success"; 
     subchild.removeAttribute("priority"); 
     subchild.removeContent(); 
    } 

但它并未完全从xml文件中删除子元素。它让我留下了

<rurl-link/> 

有什么建议吗?

回答

4

你需要这样做:

List<Element> elements = new ArrayList<Element>(); 

while (subchilditr.hasNext()) { 
    Element subchild = (Element) subchilditr.next(); 
    if (subchild.getText().equalsIgnoreCase(text)) { 
     elements.add(subchild); 
    } 
} 

for (Element element : elements) { 
    element.getParent().removeContent(element); 
} 

如果试图以消除环路内的元素,你会得到一个ConcurrentModificationException

+0

我试过了..第一次成功了..但在那之后...我开始收到空指针异常。任何想法?! – Maverick 2011-04-13 01:44:02

+0

呃..我知道了..我刚刚清除for循环后的所有元素arraylist。它解决了我的问题。非常感谢。 – Maverick 2011-04-13 01:47:47

0

如果您有父元素rurl,则可以使用方法removeChildremoveChildren删除其子元素。

+0

我不想删除所有rurl-link childs ..我只想单个节点被删除,如果它符合我的条件。 – Maverick 2011-04-13 01:29:32

+1

@mad_programmer:'element.getParent()。removeContent(child)'将完成这项工作。有关更多信息,请参见class [org.jdom.Parent](http://www.jdom.org/docs/apidocs/org/jdom/Parent.html)。 – 2011-04-13 01:37:01

+0

这将删除所有元素。 – vijayk 2013-12-19 07:38:04