上篇我們講解了如何使用 Kotlin 來寫 XML parser ,我們也有提到 DOM parser 有個缺點就是有可能會消耗較多的記憶體,這點在 mobile 平台其實要特別注意,尤其是 Android 系統,Android 的裝置很多,我們沒辦法保證手機的記憶體一定很大。在寫 Android APP 的時候,希望能夠盡可能地省記憶體。那之前介紹的 DOM parser 在 Android 上不見得是很好的做法,幸運的是 Android 原生有提供優化過的 XML parser ,我們可以拿這個來當成我們日後 annotation processor 的 parser generator 的基底。
這個 parser 其實並不存在 Java 的 standard library ,他是一個 Android 額外納入的 library ,但他的運作原理其實跟 StAX 一樣。
XmlPullParser
雖說比較快,也比較省記憶體,但還是有一個缺點:無法直接跨層存取 tag ,必須要一層一層讀取。這個對我們在寫 parser 的時候,或許會比較不方便,我們可以用暫存的變數先把一層層的參數存起來解決無法跨層存取的問題。
XmlPullParser
在拉 event 的時候是靠 next()
這個方法去達成的,有點像是我們在寫 List 的 iterator ,迴圈每次去問還有沒有下個 element 可以用。在這個 parser 裡面有預先定義好一些 event 可以讓我們使用:
START_DOCUMENT
START_TAG
TEXT
END_TAG
END_DOCUMENT
下篇我們將會開始實作 XmlPullParser
,我們可以比較一下它寫起來的感覺和 DOM parser 有什麼差別!