Преобразование org.w3c.dom.Node в документ

У меня есть Node от одного Document. Я хочу взять этот Node и превратить его в корень 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);

Это работает, но я чувствую, что это довольно досадно многословно. Есть ли менее подробный/более прямой способ, который я не вижу, или мне просто нужно сделать это таким образом?

Ответ 1

Код не работал у меня - но с некоторыми изменениями из этого связанного вопроса я мог бы заставить его работать следующим образом:

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);

Ответ 2

Это похоже на меня. Хотя он выглядит в целом подробным, он, конечно, не выглядит значительно более подробным, чем другой код с использованием DOM API. Это просто раздражающий API, к сожалению.

Конечно, проще, если у вас уже есть DocumentBuilder из другого места, что избавит вас от довольно большого количества вашего кода.

Ответ 3

Возможно, вы можете использовать этот код:

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