我的要求是合并多个xml文件,其中每个文件将在while循环中生成,并将组合的xml文件合并到根xml。我试图遵循以下结构,但它不起作用。任何人都可以建议这是正确的方法。此外,我不能选择任何xpath选项,因为每次创建的xml都是动态的......但命名空间也是一样的。
public Document xmlCreation(){
Document document1 = createDocument();
Node node1 = document1.getDocumentElement(); //Root node
//xml root node created
Document document2 = createDocument();
while(condition)
{
// some steps
Document document3 = createDocument();
Node node3 = document3.getDocumentElement(); //child node
// xml created
node3.appendChild(document2);
}
Node node2 = document2.getDocumentElement();
addChildNode(document1,node2);
return(document1);
}
提前谢谢!!
答案 0 :(得分:1)
您无法从其他文档中添加Node
。您有两种选择:
Document.adoptNode
将所有者文档更改为目标文档。如果失败(即返回null
),则只有选项2。Document.importNode
创建适合目标文档/ DOM实现的节点副本。请注意,即使这样,您也无法在示例代码中尝试将Document
添加到另一个Node
。您可以使用上面的两个选项将源文档的子节点添加到目标节点。您通常想要的是将单个根文档元素添加到另一个元素。
答案 1 :(得分:1)
尝试创建resultDocument并使用adoptNode()。这会将节点从旧文档移动到新的resultDocument。来自javadoc:
尝试将其他文档中的节点采用到此文档中。如果支持,它将更改源节点的ownerDocument,其子节点以及附加的属性节点(如果有)。如果源节点具有父节点,则首先从其父节点的子节点列表中删除它。这有效地允许将子树从一个文档移动到另一个文档(不像importNode(),它创建源节点的副本而不是移动它)。当它失败时,应用程序应该使用Document.importNode()。
答案 2 :(得分:0)
使用document.importNode(...)
。
有关详细信息,请参阅how does one go about copying one xml document's node to another?和http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Document.html#importNode(org.w3c.dom.Node,%20boolean)。
同样,在导入节点后,您应该(仍然)将其作为子节点添加到根节点。
答案 3 :(得分:0)
通常,一个DOM Document中的节点不能直接插入另一个Document。您需要对它们运行importNode
操作以制作属于新Document的副本,然后插入这些副本。请参阅DOM常见问题解答中ownerDocument issues的讨论,了解更多关于原因和方式的文字,并参阅DOM建议书Document Node
importNode
的讨论
如果您在引入importNode
之前的1级DOM中工作,则必须实现自己的“创建新文档所拥有的等效节点”例程。