2012-11-08 17 views
11

Mam Node z jednego Document. Chcę wziąć to Node i zamienić go w węzeł główny nowego Document.Konwersja org.w3c.dom.Node do dokumentu

Jedynym sposobem mogę myśleć jest następujący:

Node node = someChildNodeFromDifferentDocument; 

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

DocumentBuilder builder = factory.newDocumentBuilder(); 

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

To działa, ale czuję, że jest dość irytująco gadatliwy. Czy istnieje mniej gadatliwy/bardziej bezpośredni sposób, którego nie widzę, czy po prostu muszę to robić w ten sposób?

+0

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

Odpowiedz

6

To wygląda na właściwe dla mnie. Chociaż wygląda to na bardzo szczegółowe, to z pewnością nie wygląda na dużo bardziej gadatliwy niż inny kod przy użyciu interfejsu DOM API. Niestety, jest to denerwujące API.

Oczywiście, łatwiej jest, jeśli już masz DocumentBuilder z innego miejsca - to by pozbyć się całkiem sporo kodu.

+0

Dobra, zgaduję, że mam aby to zaakceptować: p Tak, w moim prawdziwym kodzie stworzyłem XmlHelper, który obsługuje fabryki i tym podobne. – Svish

+0

@Svish: Dobrze - i jeśli chcesz to zrobić w więcej niż jednym miejscu, możesz łatwo napisać metodę 'createDocument' w swojej klasie pomocnika :) –

9

Kod nie działa na mnie - ale z pewnymi zmianami z tym related question mogę zmusić go do pracy w następujący sposób:

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

Być może można użyć tego kodu:

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

Odpowiedź powinna przynajmniej wskazywać gdzie znaleźć XMLHelper i implementacje DOMHelpera nie znajduje się w standardowej bibliotece Java. – igorcadelima