2012-07-10 68 views
3

當我嘗試從java程序中的XML節點中刪除節點時,它給了我一個奇怪的問題。它正在刪除備用節點。在插入新節點之前,我必須刪除現有的節點。 我的xml文件是:從XML文件中刪除節點java程序

<?xml version="1.0" encoding="windows-1252" ?> 
<chart> 
<categories> 
<category label="3 seconds"/> 
<category label="6 seconds"/> 
<category label="9 seconds"/> 
<category label="12 seconds"/> 
</categories> 

</chart> 

我的java程序是:

 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 

     Document doc = docBuilder.parse(filePath); 


     Node categories = doc.getElementsByTagName("categories").item(0); 

     NodeList categorieslist = categories.getChildNodes(); 

     // if exists delete old data the insert new data. 


     for (int c = 0; c < categorieslist.getLength(); c++) { 

     Node node = categorieslist.item(c); 
     categories.removeChild(node); 
     } 
    for(int i=1;i<20;i++){ 

    Element category = doc.createElement("category"); 
    category.setAttribute("label",3*i+" seconds"); 
    categories.appendChild(category); 
    } 

此代碼刪除替代節點,我不知道爲什麼。生成的XML是顯示是這樣的:

<categories> 
<category label="6 seconds"/> 
<category label="12 seconds"/> 
<category label="3 seconds"/> 
<category label="6 seconds"/> 
<category label="9 seconds"/> 
     ..... 
     ..... 
</categories> 
+0

當我嘗試從for循環打印c值時,它僅打印列表值的一半大小。 – mallikarjun 2012-07-10 11:12:57

+0

當我不在循環中增加「c」值時,它就解決了。但我不知道爲什麼有人可以解釋我。 – mallikarjun 2012-07-10 11:17:51

+1

當您刪除節點0時,所有節點都向左移動。因此,節點1變爲節點0.然後,您嘗試刪除節點1,堅果永遠不會再回到刪除節點0。因此,您完全錯過了原始節點1. – 2013-09-08 21:36:50

回答

6

每次你刪除一個孩子的名單變短,名單是不是一個靜態的集合,所以你打電話的getLength(每次)你得到的實際大小

Node categories = doc.getElementsByTagName("categories").item(0); 
NodeList categorieslist = categories.getChildNodes(); 
while (categorieslist.getLength() > 0) { 
    Node node = categorieslist.item(0); 
    node.getParentNode().removeChild(node); 
} 
+0

,但它爲什麼會刪除替代節點 – mallikarjun 2012-07-11 03:49:28