2012-04-03 10 views
2

は私がcreated.I私はノードが1よりも、別のドキュメントで使用されているエラー WRONG_DOCUMENT_ERR:実行時間を取得していますdomノードを新しいノードに置き換える方法は?

String messageBody=" <imgGroup><img src="src" width="width" height="height" alt="alt" type="type" orient="orient"/></imgGroup>" 
File file=new File("doc.xml"); 
       DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder docBuilder = dbfac.newDocumentBuilder(); 
       doc = docBuilder.parse(file); 
       Element node = DocumentBuilderFactory 
       .newInstance() 
       .newDocumentBuilder() 
       .parse(new ByteArrayInputStream(messageBody.getBytes())) 
       .getDocumentElement(); 
       System.out.println(node.getClass()); 
       doc.getDocumentElement().replaceChild((Node)node, doc.getDocumentElement().getFirstChild()); 
       }catch(Exception e){ 
        e.printStackTrace(); 
       } 

としてこれを実装しています持っている新しいノードを既存のDOMノードを交換したいですそれを作成しました。

どのように異なる方法で行うことができますか?

答えて

3

Document.adoptNode()という新しいドキュメントでノードを採用する必要があります。 adoptNode()自体は、ターゲット文書の任意の場所にノードを追加するわけではなく、単にDOMツリーに追加できるようにしてください。後でreplaceChild()に電話する必要があります。

+0

ありがとうございます。 – ravitech

1

これは私にも理解するのに少し時間がかかりました。少なくともエラーメッセージは有用であり、APIは手がかりも提供します。

WRONG_DOCUMENT_ERRは、コードが2つの異なるDOMで動作していることを示します。最初のDOMは「既存の」DOMです。これはおそらく、新しいノードを追加したいものです。 2番目のDOMは、新しいノードが作成されたときに作成される「新しい」ものです。

新しいノードを既存のドキュメントにインポートできます。インポートすると、新しいノードは既存のドキュメントに追加されません。インポートすると、既存のDOMと同じドキュメント所有者を持つ新しいノードが作成されます。次に、appendやreplaceのような呼び出し、または目的の操作が何であれ、既存の文書に新しいノードを追加する必要があります。

私の前にサンプルコードはありませんが、デバッガを使用して、既存のDOMの要素と新しい要素のownerDocumentフィールドを比較することができます。

関連する問題