2012-11-08 102 views
11

我有一个的Node。我想采取Node并将其转换为新的Document的根节点。将org.w3c.dom.Node转换为文档

只有我能想到的办法是:

Node node = someChildNodeFromDifferentDocument; 

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

DocumentBuilder builder = factory.newDocumentBuilder(); 

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

这工作,但我觉得这是相当烦人冗长。有没有更详细/更直接的方式,我没有看到,或者我只需要这样做呢?

+0

这是相关http://stackoverflow.com/questions/3184268/org-w3c-dom-domexception-wrong-document-err-a-node-is-used-in-a-different-docu –

回答

6

这看起来对我来说很合适。尽管看起来好像是一般是,但它看起来并不比使用DOM API的其他代码更加冗长。不幸的是,这只是一个烦人的API。

当然,如果你已经从其他地方得到了DocumentBuilder,那就更简单了 - 这会摆脱很多你的代码。

+0

好吧,猜我只是有接受它然后:p是的,在我的实际代码中,我创建了一个处理工厂等的XmlHelper。 – Svish

+0

@Svish:对 - 如果您需要在多个位置执行此操作,则可以在辅助类中轻松编写一个'createDocument'方法: –

9

的代码并没有对我的工作 - 但与此related question一些变化,我可以得到它的工作方式如下:

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

也许你可以使用此代码:

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

答案至少应指向何处查找XMLHelper和DOMHelper的实现,因为它们'不在Java标准库中。 – igorcadelima