本系列針對 Java 領域主流 XML 處理技術進行系統歸納。本文為第一部分,介紹 JAXP 架構、三大標準解析介面 (DOM、SAX、StAX) 核心差異,並以 W3C books.xml 為範例資料,奠定後續實作基礎。
JAXP 定義了 Java 操作 XML 的標準 API,包含 解析 與 轉換 兩大能力。核心由三大解析介面組成:
規範演進:JSR 5 (JAXP 1.0) → JSR 63 (JAXP 1.1/1.2) → 整合進 JDK 1.4+。
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
| 維度 | DOM | SAX | StAX |
|---|---|---|---|
| 解析模式 | 樹狀載入整份文檔 | 事件推送 | 事件拉取 |
| 記憶體佔用 | 高 (與文檔大小成正比) | 極低 (常數級) | 低 (僅當前事件) |
| 存取方式 | 隨機 (XPath、樹遍歷) | 順序單向 | 順序可控 |
| 修改支援 | 完整 (增刪改節點) | 不支援 (唯讀) | 可寫 (XMLStreamWriter) |
| 程式設計風格 | 物件導向 | 回調/訪問者模式 | 迭代器模式 |
| 適用場景 | 小文檔、需頻繁修改、隨機查詢 | 大文檔、單次順序讀取、記憶體受限 | 大文檔、需條件提前終止、需寫入 XML |
dom4j、JAXB、XOM、VTD-XML (高效能非標準替代方案)