19

私はNode1つから持ってい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);

これは機能しますが、かなり面倒なほど冗長だと思います。私が見ていない冗長/より直接的な方法はありますか、それともこの方法で行う必要がありますか?

4

5 に答える 5

21

コードは私には機能しませんでしたが、この関連する質問からいくつかの変更を加えることで、次のように機能させることができました。

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);
于 2013-01-14T08:39:03.400 に答える
6

それは私には正しいように見えます。全体的に冗長に見えますが、DOM API を使用する他のコードよりも大幅に冗長に見えるわけではありません。残念ながら、これは迷惑な API です。

もちろん、すでに他のDocumentBuilder場所から を取得している場合はより簡単です。これにより、かなり多くのコードが削除されます。

于 2012-11-08T18:10:39.013 に答える
0

多分あなたはこのコードを使うことができます:

String xmlResult = XMLHelper.nodeToXMLString(node);
Document docDataItem = DOMHelper.stringToDOM(xmlResult);    
于 2016-02-03T08:13:09.327 に答える