2012-05-05 76 views
0

我試圖刪除在Java中使用DOM解析XML文件節點。在XML結構的Java DOM刪除節點

private Node deleteChildNode (Node node, String nodeName) 
{ 
    Node tempNode = null; 
    NodeList nl = node.getChildNodes(); 
    for (int i = 0; i < nl.getLength(); i++) 
    { 
     tempNode = nl.item(i); 
     if (tempNode.getNodeName().equals(nodeName)) 
     {     
      tempNode= node.removeChild(tempNode);     
     }   
    } 
    return node; 
} 

與呼喚:

nodeClone = deleteChildNode(nodeClone, "L123"); 

但節點未被刪除。

NodeList nl = nodeClone.getChildNodes(); 
     for (int i = 0; i < nl.getLength(); i++) 
      System.out.println(nl.item(i).getNodeName()); 

顯示 「L123」 節點。

在此先感謝!

+0

爲什麼會這樣幫助?有一個節點和一個名字。節點可以被找到並且存儲在「node.removeChild」之後的「tempNode」中。但它並沒有在「節點」中刪除。這不能依賴於XML文件(因爲找到了節點)。周圍不應有更多的代碼。只需搜索要刪除的節點即可。 – Skolleus

+0

我只是不能給你更多的代碼。我在週五沒有從VersionControlSystem中檢出更多,它應該適用於每個xml。 – Skolleus

回答

5

如果你有一個給定的節點下的節點名稱的多個節點,那麼你的代碼將不能工作,因爲你將跳過節點。使用NodeList,同時刪除節點有點棘手。基本上,當您刪除子節點時,如果修改NodeList,以便所有後續節點都移回一個索引。 (類似於使用索引遍歷列表時從列表中移除元素)。一個簡單的解決方法是添加「--i;」在刪除一個子節點之後。

+0

非常感謝。而已。這個簡單的解決方案非常有效:D我想「投票」......但是我的聲望<15。 – Skolleus

+0

@Skolleus - 既然你問了這個問題,你不投票,你「接受」了答案。 – jtahlborn

+0

@Skolleus - 此外,在未來,你的問題很可能已經快回答,如果你已經明確表示有_multiple_匹配的節點和一些被越來越刪除而不是其他。 – jtahlborn

1

我用這個小方便的方法來清除所傳遞的節點的孩子:

public static void clearChildNodes(Node node){ 
    while(node.hasChildNodes()){ 
     NodeList nList = node.getChildNodes(); 
     int index = node.getChildNodes().getLength() - 1; 

     Node n = nList.item(index); 
     clearChildNodes(n); 
     node.removeChild(n); 
    } 

}