2011-12-19 71 views
1

我有以下結構的XML文件:使用JDOM通過其屬性刪除元素?

<contacts> 
    <contact id="0"> 
     <firstname /> 
     <lastname /> 
     <address> 
      <street /> 
      <city /> 
      <state /> 
      <zip /> 
      <country /> 
     </address> 
     <phone /> 
     <email /> 
     <continfo> 
      <byemail /> 
      <byphone /> 
      <bymail /> 
     </continfo> 
     <comments /> 
     <datecreated /> 
    </contact> 
</contacts> 

使用JDOM,我想通過查找id屬性刪除整個接觸元素及其所有的孩子。但是我很難解決這個問題。我已經嘗試以下方法:

Element pageRoot = pageXML.getRootElement(); 

        List<Element> contacts = new ArrayList<Element>(pageRoot.getChildren()); 
        Element contact = null; 

        for(Element element : contacts){ 
         String att = element.getAttributeValue("id"); 
         if(Integer.parseInt(att) == id){ 
          contact = (Element) element.clone(); 
         } 
        } 
pageRoot.removeContent(contact); 

但是,該聯繫人永遠不會被刪除。如果任何人都能指出我的方向,那會很棒。謝謝。

回答

1

爲什麼要克隆元素?

您可以簡單地直接將其刪除:

if (...){ 
    elementToRemove = (Element) element; 
} 
... 
pageRoot.removeContent (elementToRemove); 
+0

適合你神......回想起來這也是非常愚蠢的我。謝謝。 – Cuthbert 2011-12-19 19:31:48

1

建議和(在我看來更容易)使用Iterator.remove()去除元素。您可以在遍歷子元素時執行此操作,以避免將元素存儲到額外的局部變量中。

List children = root.getChildren("foo"); 
Iterator itr = children.iterator(); 
while (itr.hasNext()) { 
    Element child = (Element) itr.next(); 
    String att = child.getAttributeValue("id"); 
    if(Integer.parseInt(att) == id){ 
    itr.remove(); 
    } 
} 

這個例子是從JDOM faq