早期行動裝置 CPU/記憶體/頻寬受限,XML 解析負擔較重,常改用 DataInputStream 二進位協定。隨著智慧型手機與 3G 普及,XML 在行動端已具備實用價值。J2ME 兩大主流輕量解析器——KXML (Pull/增量式) 與 NanoXML (DOM/一次性)——各有適用場景。
| 特性 | KXML | NanoXML |
|---|---|---|
| 解析模式 | Pull / 增量式 | DOM / 一次性載入樹狀結構 |
| 記憶體佔用 | 極低,適合大檔 | 較高,大檔易 OOM |
| API 風格 | 事件驅動 (START_TAG, END_TAG...) | 樹狀走訪 (getChildren(), getContents()) |
| Jar 大小 | ~20 KB | ~6 KB |
| 適用場景 | 大型 XML、串流處理、低記憶體裝置 | 小型設定檔、回應訊息、一次性處理 |
XmlParser parser = new XmlParser(new InputStreamReader(conn.openInputStream()));
boolean parsing = true;
while (parsing) {
ParseEvent event = parser.read();
switch (event.getType()) {
case Xml.START_TAG: // 處理開始標籤 break;
case Xml.END_TAG: // 處理結束標籤 break;
case Xml.END_DOCUMENT: parsing = false; break;
}
}
kXMLElement root = new kXMLElement();
root.parseFromReader(new InputStreamReader(conn.openInputStream()));
Vector list = root.getChildren();
for (int i=0; i