2011-11-16 152 views
2

我寫了這個程序從樹中刪除了一個節點,但它仍然存在!從DOM中刪除一個節點

這是怎麼回事?打印節點內容後,它仍顯示與刪除節點內容相同的內容,這意味着它仍然存在!

代碼:

public class JavaApplication38 { 
    public static void check(Node node){ 


     if (node == null || node.getNodeName() == null) 
    return; 



    check(node.getFirstChild()); 

System.out.println(node.getNodeValue() != null && node.getNodeValue().trim().length() == 0 ? "" : node); 
    if ( "abcd".equals(node.getTextContent())) 
     node.getParentNode().removeChild(node); 
    check(node.getNextSibling()); 

} 
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { 


    File file = new File("d:\\a.xml"); 
    DocumentBuilderFactory dbf = 
    DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = dbf.newDocumentBuilder(); 
    Document document = db.parse(file); 
    document.getDocumentElement().normalize(); 




    Node b=document.getFirstChild(); 


    check(b); 
    check(b); 

    } 

} 
+1

等等,Java也有這個愚蠢的'node.parentNode.removeChild(node)'模式? –

+1

@Šime:如果您使用DOM API的Java實現,您當然必須忍受DOM API中的所有缺陷。但是對於XML處理通常有更好的選擇。 – jarnbjo

回答

5

從樹中刪除節點,但它確實存在一個節點,沒有父節點。除去孩子後,再次執行此

d=document.getElementsByTagName("data1"); 

b=d.item(0); 
System.out.println(b.getTextContent()); 

你不會得到相同的文本內容(如果不同data1標籤有不同的內容)。

2

沒有,節點刪除。
從樹中刪除節點會自動刪除它。

要查看節點是否被正確刪除,可以編寫一些代碼來打印樹。

編輯: 我不確定您的check方法是否訪問樹中的每個節點。
而且我會建議將修改它的代碼從代碼中分離出來;然後致電

printTree(d); 
    modifyTree(d); 
    printTree(d); 

您似乎瞭解並理解遞歸,所以您應該可以編寫一個打印樹的方法。

+0

有一個遍歷樹的遞歸函數,然後我檢查節點內容是否等於** abcd **這是** data1 **的文本內容我打印兩次,但都是相同的。那麼我的代碼有什麼用嗎? 'public static void check(Node node){if(node == null || node.getNodeName()== null) return; if(「abcd」.equals(node.getTextContent())) node.getParentNode()。removeChild(node); check(node.getFirstChild()); System.out.println(node.getNodeValue()!= null && node.getNodeValue()。trim()。length()== 0?「」:node); check(node.getNextSibling());}' – lonesome

+0

那麼,它還沒有解決呢?那麼我建議你更新這個問題。 –

+0

好的。但它只是解決了這個特定的問題 – lonesome