2012-11-08 10 views
11

Ich habe eine Node von einem Document. Ich möchte das Node nehmen und es zum Wurzelknoten eines neuen Document machen.Convert org.w3c.dom.Node in Dokument

Nur so, wie ich denken kann, ist die folgende:

Node node = someChildNodeFromDifferentDocument; 

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

DocumentBuilder builder = factory.newDocumentBuilder(); 

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

Dies funktioniert, aber ich fühle es eher nervend ausführlich ist. Gibt es einen weniger ausführlichen/direkteren Weg, den ich nicht sehe, oder muss ich es einfach so machen?

+0

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

Antwort

6

Das sieht für mich richtig aus. Während es im Allgemeinen ausführlich aussieht, sieht es sicherlich nicht wesentlich ausführlicher aus als anderer Code, der die DOM-API verwendet. Es ist leider nur eine nervige API.

Natürlich ist es einfacher, wenn Sie bereits eine DocumentBuilder von woanders haben - das würde eine Menge von Ihrem Code loswerden.

+0

In Ordnung, denke ich habe gerade um es dann zu akzeptieren: p Ja, in meinem tatsächlichen Code habe ich einen XmlHelper erstellt, der die Fabriken und dergleichen behandelt. – Svish

+0

@Svish: Richtig - und wenn Sie dies an mehr als einem Ort tun müssen, könnten Sie einfach eine 'createDocument' Methode in Ihrer Hilfsklasse schreiben :) –

9

Der Code nicht für mich arbeiten - aber mit einigen Änderungen von diesem related question ich konnte es wie folgt zu arbeiten:

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

Vielleicht können Sie diesen Code verwenden:

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

Die Antwort sollte zumindest zeigen, wo XMLHelpers und DOMHelper's Implementierungen zu finden sind sind nicht in der Java-Standardbibliothek. – igorcadelima