1. removeChild must be called on a direct parent
2. you cannot just add a node from one document to another document, you need to use importNodesee the errors withcatch (Exception ex)
{
   ex.printStackTrace(); 
}

解决方案 »

  1.   

    to Saucer:有个问题,我修改了上面的程序,现在的程序如下,有3个Document,需要将dataDoc中与oDoc内容一样的节点删除,然后再把updateDoc加入到dataDoc中,但死活报错说 :org.apache.crimson.tree.DomEx: NOT_FOUND_ERR:该节点不存在于该文本中。
            at org.apache.crimson.tree.ParentNode.removeChild(ParentNode.java:500)
            at test.UpdateDocument.main(UpdateDocument.java:64)能否解决这个问题?程序清单如下:package test;
    import java.io.*;
    import java.sql.*;
    import java.util.*;import org.w3c.dom.*;
    import javax.xml.parsers.*;import javax.xml.transform.*;
    import javax.xml.transform.dom.*;
    import javax.xml.transform.stream.*;
    public class UpdateDocument
    {
      public static void main(String[] args)
      {
        Document dataDoc = null;
        Element dataRoot = null;    Document oDoc  = null;
        Element  oRoot = null;    Document updateDoc = null;
        Element updateRoot = null;
        
        try 
        {
          DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
          DocumentBuilder docBuilder = dbFactory.newDocumentBuilder();
          
          // dataDoc 
          // {   
          dataDoc  = docBuilder.newDocument();
          dataRoot = dataDoc.createElement("root");      
          
          Element aNode = dataDoc.createElement("AAA");
          Element bNode = dataDoc.createElement("BBB");
          
          dataRoot.appendChild(aNode);
          dataRoot.appendChild(bNode);
          
          dataDoc.appendChild(dataRoot);
          // }
          
          // updateDoc
          // {
          updateDoc  = docBuilder.newDocument();
          updateRoot = updateDoc.createElement("CCC");
          
          updateDoc.appendChild(updateRoot); 
          // }
          
          // oDoc
          // {
          oDoc = docBuilder.newDocument();
          oRoot = oDoc.createElement("AAA");
          
          oDoc.appendChild(oRoot);
          // }
          
          dataRoot.removeChild(dataDoc.importNode(oRoot,true));
          dataRoot.appendChild(dataDoc.importNode(updateRoot,true));
          
          System.out.println(dataDoc.getDocumentElement().toString());
          
        }
        catch (Exception ex)
        {
          ex.printStackTrace();
        }
      }
    }
      

  2.   

    dataRoot.removeChild(dataDoc.importNode(oRoot,true));
    dataRoot.appendChild(dataDoc.importNode(updateRoot,true));
    ===>
    dataRoot.removeChild(aNode);
    dataRoot.appendChild(updateDoc.importNode(updateRoot,true));
      

  3.   

    to Saucer :问题就在于我现在的环境下,得不到dataDoc的aNode,只能得到一个与aNode内容一致的oDoc的oRoot所以,我需要1.把dataDoc中与oDoc.oRoot一样的aNode删除2.把updateDoc.updateRoot添加到dataDoc中不知道能否实现?
      

  4.   

    you can get the tag name of the oDoc.oRoot, then use dataDoc.getElementsByTagName to get those nodes in dataDoc and remove them,...
      

  5.   

    Great !谢谢Saucer最后的程序如下:package test;
    import java.io.*;
    import java.sql.*;
    import java.util.*;import org.w3c.dom.*;
    import javax.xml.parsers.*;import javax.xml.transform.*;
    import javax.xml.transform.dom.*;
    import javax.xml.transform.stream.*;
    public class UpdateDocument
    {
      public static void main(String[] args)
      {
        Document dataDoc = null;
        Element dataRoot = null;    Document oDoc  = null;
        Element  oRoot = null;    Document updateDoc = null;
        Element updateRoot = null;
        
        try 
        {
          DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
          DocumentBuilder docBuilder = dbFactory.newDocumentBuilder();
          
          // dataDoc 
          // {   
          dataDoc  = docBuilder.newDocument();
          dataRoot = dataDoc.createElement("root");      
          
          Element aNode = dataDoc.createElement("AAA");
          Element bNode = dataDoc.createElement("BBB");
          
          dataRoot.appendChild(aNode);
          dataRoot.appendChild(bNode);
          
          dataDoc.appendChild(dataRoot);
          // }
          
          // updateDoc
          // {
          updateDoc  = docBuilder.newDocument();
          updateRoot = updateDoc.createElement("CCC");
          
          updateDoc.appendChild(updateRoot); 
          // }
          
          // oDoc
          // {
          oDoc = docBuilder.newDocument();
          oRoot = oDoc.createElement("AAA");
          
          oDoc.appendChild(oRoot);
          // }
          
          String name = oRoot.getTagName();
          NodeList nl = dataDoc.getElementsByTagName(name);
          Node node = nl.item(0);
          
          dataRoot.removeChild(node);
          dataRoot.appendChild(dataDoc.importNode(updateRoot,true));
          System.out.println(dataDoc.getDocumentElement().toString());
          
        }
        catch (Exception ex)
        {
          ex.printStackTrace();
        }
      }
    }