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

Java Pull 解析 XML 完整實戰教程

     編輯:Java 綜合教學

Java Pull 解析 XML 完整實戰教程

Pull 解析器(XmlPullParser)是 Android 官方推薦、輕量高效的 XML 解析方式。不同於 DOM 一次性載入整棵樹,Pull 解析器以流式方式逐節點讀取,內存佔用極低,極適合移動端及大文件場景。本文通過完整示例講解核心 API 與最佳實踐。

示例 XML 數據 (student.xml)

<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student id="1001">
        <stuno>1001</stuno>
        <name>張三</name>
        <sex>男</sex>
        <grade>Java一班</grade>
    </student>
    <student id="1002">
        <stuno>1002</stuno>
        <name>李四</name>
        <sex>女</sex>
        <grade>Java二班</grade>
    </student>
    <student id="1003">
        <stuno>1003</stuno>
        <name>小二</name>
        <sex>男</sex>
        <grade>Java三班</grade>
    </student>
    <student id="1004">
        <stuno>1004</stuno>
        <name>小蠟</name>
        <sex>女</sex>
        <grade>Java四班</grade>
    </student>
</students>

核心解析代碼

package xmlpulldemo;

import java.io.FileInputStream;
import java.io.IOException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

public class XmlPullDemo {

    public static void main(String[] args) throws XmlPullParserException, IOException {
        // 1. 獲取解析工廠
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        // 2. 創建解析器
        XmlPullParser parser = factory.newPullParser();
        // 3. 設置輸入流與編碼
        parser.setInput(new FileInputStream("src/xmlwendang/student.xml"), "UTF-8");
        
        // 4. 事件驅動循環
        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            switch (eventType) {
                case XmlPullParser.START_DOCUMENT:
                    System.out.println("=== 開始解析文檔 ===");
                    break;
                    
                case XmlPullParser.START_TAG:
                    String tagName = parser.getName();
                    if ("student".equals(tagName)) {
                        // 獲取屬性值
                        String id = parser.getAttributeValue(null, "id");
                        System.out.println("\n學生 ID: " + id);
                    } else if ("stuno".equals(tagName)) {
                        System.out.println("學號: " + parser.nextText());
                    } else if ("name".equals(tagName)) {
                        System.out.println("姓名: " + parser.nextText());
                    } else if ("sex".equals(tagName)) {
                        System.out.println("性別: " + parser.nextText());
                    } else if ("grade".equals(tagName)) {
                        System.out.println("班級: " + parser.nextText());
                    }
                    break;
                    
                case XmlPullParser.END_TAG:
                    if ("student".equals(parser.getName())) {
                        System.out.println("--- 學生信息結束 ---");
                    }
                    break;
            }
            // 移動到下一個事件
            eventType = parser.next();
        }
        System.out.println("\n=== 文檔解析完成 ===");
    }
}

關鍵點解析

  1. 事件類型:START_DOCUMENT、START_TAG、TEXT、END_TAG、END_DOCUMENT。
  2. 獲取文本內容:在 START_TAG 事件中調用 parser.nextText() 可直接讀取該標籤內的文本,並自動移動到對應的 END_TAG。
  3. 屬性讀取:getAttributeValue(namespace, name),namespace 通常傳 null。
  4. 命名空間處理:若 XML 包含命名空間,需調用 parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true) 並使用帶命名空間的方法。

運行結果預覽

=== 開始解析文檔 ===

學生 ID: 1001
學號: 1001
姓名: 張三
性別: 男
班級: Java一班
--- 學生信息結束 ---

學生 ID: 1002
學號: 1002
姓名: 李四
性別: 女
班級: Java二班
--- 學生信息結束 ---
...
=== 文檔解析完成 ===

優勢總結

  • 內存效率高:不建立完整 DOM 樹,適合大文件。
  • 代碼直觀:事件驅動模型邏輯清晰。
  • Android 原生支援:無需第三方庫,org.xmlpull.v1 已內置。
  • 可控性強:可隨時中斷解析,節省資源。

掌握 Pull 解析,是 Java/Android 處理 XML 數據的必備技能。

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