2012-11-08 7 views
11

私はNodeを1つからDocumentまで持っています。私はそれをNodeとし、それを新しいDocumentのルートノードにしたいと思う。私は考えることができるorg.w3c.dom.Nodeを文書に変換する

唯一の方法は以下の通りです:

Node node = someChildNodeFromDifferentDocument; 

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setNamespaceAware(true); 

DocumentBuilder builder = factory.newDocumentBuilder(); 

Document newDocument = builder.newDocument(); 
newDocument.importNode(node); 
newDocument.appendChild(node); 

これは動作しますが、私はそれがかなりうるさく冗長であると感じています。それほど冗長ではない、より直接的な方法は私が見ていない、または私はちょうどこのようにする必要がありますか?

+0

をhttp://stackoverflow.com/questions/3184268/org-w3c-dom-domexception-wrong-document-err-a-node-is-used-in-a-different-docu –

答えて

6

これは私にとって正しいことです。 と一般的にはのように見えますが、DOM APIを使用する他のコードよりも冗長であるとは限りません。残念なことに、ちょっと面倒なAPIです。

もちろん、他の場所から既にDocumentBuilderを取得しているのなら、それは簡単です。それはかなりのコードを削除します。

+0

に関連しています。それを受け入れるには:pええ、実際のコードでは、工場などを扱うXmlHelperを作成しました。 – Svish

+0

@Svish:そうです。複数の場所でこれを行う必要がある場合は、ヘルパークラスに 'createDocument'メソッドを簡単に書くことができます:) –

9

コードは私のために動作しませんでした - しかし、次のように、このrelated questionからいくつかの変更と私はそれが仕事を得ることができます:

Node node = someChildNodeFromDifferentDocument; 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setNamespaceAware(true); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
Document newDocument = builder.newDocument(); 
Node importedNode = newDocument.importNode(node, true); 
newDocument.appendChild(importedNode); 
0

たぶん、あなたはこのコードを使用することができます。これは

String xmlResult = XMLHelper.nodeToXMLString(node); 
Document docDataItem = DOMHelper.stringToDOM(xmlResult);  
+4

答えは少なくとも、XMLHelperとDOMHelperの実装がどこにあるのかを指摘する必要がありますJava標準ライブラリにはありません。 – igorcadelima

関連する問題