1つのNode
からDocument
があります。そのNode
を取得して、新しいDocument
のルートノードに変換したいと思います。
私が考えることができる唯一の方法は次のとおりです。
Node node = someChildNodeFromDifferentDocument;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document newDocument = builder.newDocument();
newDocument.importNode(node);
newDocument.appendChild(node);
これは機能しますが、かなり冗長な感じがします。私が見ていない冗長性の少ない/より直接的な方法はありますか、それともこの方法で行う必要がありますか?
コードは私には機能しませんでした-しかし、これからいくつかの変更を加えて 関連する質問 私はそれを次のように機能させることができました:
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);
それは私にはほぼ正しいように見えます。見た目は一般的に冗長ですが、DOMAPIを使用する他のコードよりも大幅に冗長に見えることは確かではありません。残念ながら、これは単なる迷惑なAPIです。
もちろん、他の場所からDocumentBuilder
をすでに取得している場合は、より簡単です。これにより、かなり多くのコードが削除されます。
多分あなたはこのコードを使うことができます:
String xmlResult = XMLHelper.nodeToXMLString(node);
Document docDataItem = DOMHelper.stringToDOM(xmlResult);
ノードからのドキュメント
Document document = node.getOwnerDocument();