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

Java DOM 與 XML 互轉完整實戰指南

     編輯:Java 程式設計入門

DOM 模型核心概念與 Java 實作

文件物件模型(DOM)是 W3C 制定的標準程式介面,用於表示 HTML 與 XML 文件的邏輯結構。DOM 將文件解析為階層式節點樹,使開發者能以程式化方式存取、操作文件內容。自 JDK 1.4 起,Java 內建完整支援 DOM Level 2 Core 規範,提供豐富的 API 實現 XML 與 DOM 文件的雙向轉換。

DOM 內部邏輯結構

DOM 文件以節點樹形式呈現,每個 XML 元素對應一個節點物件。核心節點類型包括:

  • Document:文件根節點,每個 DOM 文件僅有一個
  • Element:元素節點,對應 XML 標籤
  • Text:文字節點,包含元素內的文字內容
  • Comment:註解節點
  • Attribute:屬性節點

透過節點間的父子關係,構建出完整的文件樹結構。

Java DOM 核心 API 套件

JDK 在三個主要套件提供 DOM 相關功能:

套件核心類別/介面用途
org.w3c.domDocument, Element, Node, NodeList, TextDOM 文件操作核心介面
javax.xml.parsersDocumentBuilder, DocumentBuilderFactoryXML 解析器,將 XML 轉為 DOM
javax.xml.transformTransformer, TransformerFactory, DOMSource, StreamResultDOM 轉換輸出為 XML/HTML/文字

四大核心操作實作範例

1. XML 解析為 DOM 文件

// 取得 XML 解析器工廠
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 建立解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析 XML 檔案生成 DOM 文件
Document document = builder.parse(new File("example.xml"));

2. 遞迴遍歷 DOM 節點樹

// 取得根元素
Element root = document.getDocumentElement();
// 取得子節點列表
NodeList nodeList = root.getChildNodes();
// 遞迴遍歷
traverseNodes(nodeList);

// 遞迴方法實作
public void traverseNodes(NodeList nodeList) {
    if (nodeList.getLength() == 0) return;
    
    for (int i = 0; i < nodeList.getLength(); i++) {
        Node node = nodeList.item(i);
        short nodeType = node.getNodeType();
        
        // 節點類型:1=Element, 3=Text
        if (nodeType == Node.ELEMENT_NODE) {
            System.out.println("元素: " + node.getNodeName());
        } else if (nodeType == Node.TEXT_NODE) {
            String text = node.getNodeValue().trim();
            if (!text.isEmpty()) {
                System.out.println("文字: " + text);
            }
        }
        
        // 遞迴處理子節點
        if (node.hasChildNodes()) {
            traverseNodes(node.getChildNodes());
        }
    }
}

3. 修改 DOM 文件內容

// 取得根元素
Element root = document.getDocumentElement();

// 建立新元素節點
Element bookType = document.createElement("BOOK_TYPE");
root.appendChild(bookType);  // 加入根節點下

Element title = document.createElement("TITLE");
bookType.appendChild(title); // 加入 bookType 下

// 建立文字節點並設定內容
Text bookName = document.createTextNode("Java 程式設計入門");
title.appendChild(bookName); // 加入 title 下

4. DOM 文件轉存為 XML 檔案

// 建立轉換器
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer transformer = tfactory.newTransformer();

// 設定輸出來源(DOM 文件)與目標(XML 檔案)
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File("output.xml"));

// 執行轉換
transformer.transform(source, result);

實務應用建議

  • 命名空間處理:解析含命名空間的 XML 時,需啟用 factory.setNamespaceAware(true)
  • 效能考量:大型 XML 檔案建議改用 SAX 或 StAX 流式解析,避免記憶體壓力
  • 格式化輸出:可透過 transformer.setOutputProperty(OutputKeys.INDENT, "yes") 產生縮排易讀的 XML
  • 錯誤處理:解析與轉換過程皆需捕獲 ParserConfigurationException、SAXException、TransformerException 等異常

掌握 DOM 與 XML 的雙向轉換技術,是 Java 處理設定檔、資料交換、文件產生等案例的基礎能力。結合 XPath 查詢、Schema 驗證等進階功能,可構建強健的 XML 處理方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved