2011-04-13 91 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