将XML节点中的子节点拆分为自己的XML文件

我有一个XML文件(在左侧),我想创建多个文件(在右侧):

 file1:            file2:          

我试图从原始XML文件中取出第一个子节点并将其添加到新的节点,但我一直在更换节点时遇到错误。

我想做类似以下的事情

  DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = dbfac.newDocumentBuilder(); Document newDocument; Node firstChild = document.getFirstChild(); NodeList childNodes = firstChild.getChildNodes(); Element parentNode; for (int i = 1; i < childNodes.getLength(); i++ ) { newDocument = docBuilder.newDocument(); parentNode = newDocument.createElement("ParentNode"); newDocument.appendChild(parentNode); newDocument.getFirstChild().appendChild(childNodes.item(i)); } 

但是我收到了一个错误

 org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it. 

任何指向正确方向的帮助表示赞赏!

从Java文档,

使用cloneNode方法。

概要:

 public Node cloneNode(boolean deep) 

返回此节点的副本,即用作节点的通用副本构造函数。 重复节点没有父节点; (parentNode为null。)。

克隆元素会复制所有属性及其值,包括由XML处理器生成的属性以表示默认属性,但此方法不会复制它包含的任何文本,除非它是深度克隆,因为文本包含在子文本节点中。 直接克隆属性,而不是作为元素克隆操作的一部分克隆,返回指定的属性(指定为true)。 克隆任何其他类型的节点只会返回此节点的副本。

请注意,克隆不可变子树会导致可变副本,但EntityReference克隆的子节点是只读的。 此外,还指定了未指定的Attr节点的克隆。 并且,克隆Document,DocumentType,Entity和Notation节点取决于实现。

编辑:

 import java.io.*; import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.*; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; public class Test{ static public void main(String[] arg) throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse("foo.xml"); TransformerFactory tranFactory = TransformerFactory.newInstance(); Transformer aTransformer = tranFactory.newTransformer(); NodeList list = doc.getFirstChild().getChildNodes(); for (int i=0; i 

DOM中的节点具有其拥有文档的概念(因此您的WRONG_DOCUMENT_ERR )。

因此,您需要将节点从原始DOM 导入到新DOM中。 请参见Document.importNode()