使用文档类在java中合并xml文件

时间:2014-02-28 14:24:02

标签: java xml

我的要求是合并多个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);

            }

提前谢谢!!

4 个答案:

答案 0 :(得分:1)

您无法从其他文档中添加Node。您有两种选择:

  1. 尝试Document.adoptNode将所有者文档更改为目标文档。如果失败(即返回null),则只有选项2。
  2. 使用Document.importNode创建适合目标文档/ DOM实现的节点副本。
  3. 请注意,即使这样,您也无法在示例代码中尝试将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中工作,则必须实现自己的“创建新文档所拥有的等效节点”例程。