首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 合併 XML 文件實作指南:DOM 解析器與遞歸複製節點的完整方案

     編輯:Java 程式設計入門

設計思路

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.*;

三大核心方法實作

1. 主流程 isMerging(mainFile, subFile)

  • 建立 DocumentBuilder 解析兩文件獲取 Document 與根 Element
  • 遍歷副文件根節點直屬子節點(步進 2 跳過文字節點),逐個呼叫 duplicate()
  • 呼叫 writeTo() 將合併後的 DOM 寫回目標文件

2. 遞歸複製 duplicate(doc, father, son)

  • 在目標文件建立同名元素 subItem
  • 複製所有屬性:遍歷 NamedNodeMap 逐個 setAttribute
  • 複製文字內容:取首個 Text 子節點值,建立 TextNode 掛載
  • 遞歸處理子節點:若有子元素則逐個遞歸呼叫自身

3. 序列化輸出 writeTo(doc, fileName)

  • 使用 TransformerFactory 建立 Transformer
  • 設定輸出屬性:編碼 GB2312(可依需求改 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>)
  • 插入位置可控制:不限於根節點末尾,可指定 XPath 或特定父節點
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved