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

Java 解析與讀取 XML 文件完整指南(DOM 解析器實戰範例)

     編輯:Java 相關知識

前言

XML(可擴展標記語言)作為數據交換的標準格式,在 Java 開發中極為常見。本文將詳細介紹如何使用 Java 內建的 DOM(Document Object Model)解析器來讀取與解析 XML 文件,並提供完整的代碼範例供參考。

範例 XML 文件結構

假設我們有一個 students.xml 文件,內容如下:

<?xml version="1.0"?>
<students>
  <student>
    <name>John</name>
    <grade>B</grade>
    <age>12</age>
  </student>
  <student>
    <name>Mary</name>
    <grade>A</grade>
    <age>11</age>
  </student>
  <student>
    <name>Simon</name>
    <grade>A</grade>
    <age>18</age>
  </student>
</students>

Java DOM 解析代碼實現

以下代碼展示了如何使用 DocumentBuilderFactory 與 DocumentBuilder 解析 XML,並遍歷所有學生節點:

package net.viralpatel.java.xmlparser;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XMLParser {

    public void getAllUserNames(String fileName) {
        try {
            // 1. 獲取 DocumentBuilderFactory 實例
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            // 2. 創建 DocumentBuilder
            DocumentBuilder db = dbf.newDocumentBuilder();
            // 3. 載入 XML 文件
            File file = new File(fileName);
            if (file.exists()) {
                Document doc = db.parse(file);
                // 4. 獲取根元素
                Element docEle = doc.getDocumentElement();
                System.out.println("根元素: " + docEle.getNodeName());

                // 5. 獲取所有 student 節點
                NodeList studentList = docEle.getElementsByTagName("student");
                System.out.println("學生總數: " + studentList.getLength());

                // 6. 遍歷並提取數據
                if (studentList != null && studentList.getLength() > 0) {
                    for (int i = 0; i < studentList.getLength(); i++) {
                        Node node = studentList.item(i);
                        if (node.getNodeType() == Node.ELEMENT_NODE) {
                            System.out.println("=====================");
                            Element e = (Element) node;
                            // 獲取子元素值
                            NodeList nameList = e.getElementsByTagName("name");
                            System.out.println("姓名: " + nameList.item(0).getChildNodes().item(0).getNodeValue());
                            NodeList gradeList = e.getElementsByTagName("grade");
                            System.out.println("年級: " + gradeList.item(0).getChildNodes().item(0).getNodeValue());
                            NodeList ageList = e.getElementsByTagName("age");
                            System.out.println("年齡: " + ageList.item(0).getChildNodes().item(0).getNodeValue());
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        XMLParser parser = new XMLParser();
        parser.getAllUserNames("c:\\test.xml");
    }
}

關鍵步驟解析

  1. 創建解析器工廠:DocumentBuilderFactory.newInstance() 用於獲取工廠實例。
  2. 創建構建器:dbf.newDocumentBuilder() 生成解析器。
  3. 解析文件:db.parse(file) 將 XML 文件轉為 Document 對象樹。
  4. 導航節點:使用 getElementsByTagName 獲取節點列表,再通過 getChildNodes().item(0).getNodeValue() 取得文本內容。

常見注意事項

  • DOM 解析會將整個 XML 載入內存,適用於中小型文件;大文件建議使用 SAX 或 StAX 流式解析。
  • 解析前請確保 XML 文件格式正確,否則會拋出 SAXParseException。
  • 生產環境中建議啟用命名空間感知(dbf.setNamespaceAware(true))以應對複雜 XML。

總結

本文通過完整實例演示了 Java DOM 解析 XML 的標準流程。掌握此技術有助於處理配置文件、數據交換等常見場景。如需更高性能,可進一步學習 SAX 或 StAX 解析器。

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