簡體   English   中英

使用文檔類在Java中合並XML文件

[英]Merging xml files in java using document class

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

            }

先感謝您 !!

您不能從另一個文檔添加Node 您有兩種選擇:

  1. 嘗試使用Document.adoptNode將所有者文檔更改為目標文檔。 如果失敗(即返回null ),則只有選項2。
  2. 使用Document.importNode創建適合於目標文檔/ DOM實現的節點的副本。

請記住,即使那樣,您也無法像在示例代碼中一樣嘗試將Document添加到另一個Node 您可以使用上面的兩個選項將源文檔的子節點添加到目標節點。 通常,您希望將單個根文檔元素添加到另一個元素。

嘗試創建一個resultDocument並使用acceptNode()。 這會將節點從舊文檔移到新的resultDocument。 javadoc

嘗試采用另一個文檔到此文檔的節點。 如果支持,它將更改源節點,其子節點以及附加的屬性節點(如果有)的ownerDocument。 如果源節點具有父節點,則首先將其從其父節點的子列表中刪除。 這有效地允許將子樹從一個文檔移動到另一個文檔(與importNode()不同,后者創建源節點的副本而不是移動它)。 失敗時,應用程序應改用Document.importNode()。

使用document.importNode(...)

請參閱如何將一個xml文檔的節點復制到另一個? http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Document.html#importNode(org.w3c.dom.Node,%20boolean)了解更多詳細信息。

同樣,在導入節點之后,您應該(仍然)將其作為子節點添加到根節點。

通常,不能將一個DOM文檔中的節點直接插入到另一文檔中。 您需要對它們運行importNode操作以制作屬於新Document的副本,然后插入這些副本。 請參閱DOM FAQ中有關ownerDocument問題的討論,以獲取關於為什么和如何的更多信息,並參閱DOM Recommendation對文檔節點的定義中對importNode的討論。

如果您在使用importNode之前的1級DOM中工作,則必須實現自己的“創建新Document擁有的等效節點”例程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM