[英]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
。 您有兩種選擇:
Document.adoptNode
將所有者文檔更改為目標文檔。 如果失敗(即返回null
),則只有選項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.