XML 語法嚴格(標籤必配對),單純字串拼接易產生非法文件。採用 javax.xml.parsers 解析兩份文件為 DOM 樹,取得根元素,遞歸複製被合併文件的所有子節點(含屬性、文字內容、巢狀子元素)到目標文件對應位置,最後序列化寫回磁碟。
import java.io.*;
import java.util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.XmlDocument; // 寫入用
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
isMerging(mainFile, subFile)DocumentBuilder 解析兩文件獲取 Document 與根 Elementduplicate()writeTo() 將合併後的 DOM 寫回目標文件duplicate(doc, father, son)subItemNamedNodeMap 逐個 setAttributeText 子節點值,建立 TextNode 掛載writeTo(doc, fileName)TransformerFactory 建立 TransformerGB2312(可依需求改 UTF-8)transform(new DOMSource(doc), new StreamResult(file)) 完成寫入public static void main(String[] args) throws Exception {
boolean ok = isMerging("D:/a.xml", "D:/b.xml");
System.out.println(ok ? "XML files have been merged." : "XML files have NOT been merged.");
}
<system>)