Node (基礎接口) ├── Branch (分支節點,含導航方法) │ ├── Document (文檔根) │ └── Element (元素節點) ├── Attribute (屬性) ├── Text (文本內容) ├── Comment (註釋) └── ... 其他節點類型
特點:所有對象均繼承 Node,Branch 封裝了常用導航(如 element(), elements(), attribute()),Element 直接包含 Attribute 與 Text,Document 封裝整棵樹。
Node (基礎接口) ├── Document ├── Element ├── Attr (屬性) ├── Text ├── Comment └── ...
特點:無 Branch 層級,所有操作直接在 Node 上進行。節點間無內建關聯屬性,創建/刪除節點需手動維護父子關係(appendChild, removeChild 需先獲取父節點)。
| 特性 | DOM4J | JAXP DOM |
|---|---|---|
| 節點導航 | Branch 提供豐富便捷方法 | 僅基礎 Node 方法(getFirstChild, getNextSibling 等) |
| 屬性訪問 | Element 直接有 attribute() | 需轉型為 Element 才有 getAttribute(),Node 無此方法 |
| 節點創建/刪除 | 高級 API 封裝,自動維護樹結構 | 手動調用 createElement, appendChild, 需管理父節點引用 |
| 查詢結果 | 統一返回 List | 統一返回 NodeList |
| 文本修改 | Node/Text 均可 | Node/Text 均可 |
SAX 並非完全不載入記憶體,而是使用固定緩衝區(約 3MB)。解析器讀取文件流,填滿緩衝區後觸發 characters(char[] ch, int start, int length) 事件,處理完清空緩衝區繼續讀取。
小文檔:全載入緩衝區,單次 characters 即可獲取所有內容。
大文檔:多次觸發 characters,需自行拼接或流式處理。
本質上,SAX 解析器內部維護一個讀取指針,類似 IO 流的游標移動。