各種解析XML的iOS類庫對比
在iPhone開發中,XML的解析有很多選擇,僅iOS SDK就提供了 NSXMLParser和 libxml2兩個類庫,還有如 TBXML、 TouchXML、 KissXML、 TinyXML和 GDataXML等第三方類庫。
解析XML通常有兩種方式:DOM和SAX
- DOM解析XML時,讀入整個XML文檔并構建一個駐留內存的樹結構(稱“節點樹”),之后就通過遍歷樹結構可以檢索任意XML節點,讀取它的屬性和值。而起通常情況下,可以借助XPath,直接查詢XML節點。
- SAX解析XML,是基于事件通知的模式,一邊讀取XML文檔一邊處理,不必等整個文檔加載完之后才采取操作,當在讀取解析過程中遇到需要處理的對象,會發出通知對其進行處理。 </ul>
- NSXMLParser 這是一個SAX方式解析XML的類庫,默認包含在iOS SDK中,使用也比較簡單。(下次專門總結學習)
- libxml2 是一套默認包含在iOS SDK中的開源類庫,它是基于C語言的API,所以使用起來相對不太方便,但它同時支持DOM和SAX解析,尤其是它的SAX解析方式很酷,可以邊讀邊解 析,非常適用于從網上下載一個很大的XML文件,可極大提供解析效率。
- TBXML 是一套輕量級的DOM方式的XML解析類庫,有很好的性能和低內存占用,不過它不對XML格式進行校驗,不支持XPath,并且只支持解析,不支持對XML進行修改。
- TouchXML 這也是一套DOM方式的XML解析類庫,支持XPath,不支持XML的修改。
- KissXML 這是一套基于TouchXML的XML解析類庫,只不過實現了支持XML的修改。
- TinyXML 這是一套小巧的基于C語言的DOM方式進行XML解析的類庫,支持對XML的讀取和修改,不直接支持XPath,需要借助TinyXPath才可以支持XPath。
- GDataXML 它是Google開發的DOM方式XML解析類庫,支持讀取和修改XML文檔,支持XPath方式查詢。 </ol>
一般在iOS平臺下,比較常用的XML解析類庫有如下幾種:
以上幾大類庫,在讀取很小的XML文檔上,性能基本沒有差別,不過從調用的方便性來說,建議使用TouchXML、KissXML或GDataXML。
如果是需要讀取和修改XML文檔,建議使用KissXML或GDataXML。
如果需要讀取非常大的XML文檔,則建議使用libxml2或TBXML。
不想使用第三方類庫,則就使用iOS自帶的NSXMLParser。
圖中可以看出 SDK 自帶的 NSXML 實際上是最慢的。TBXML 是最快的,當然,如前面所說,它簡單,功能也少。個人覺得 libxml2 是比較好的方案,不僅同時支持 SAX 和 DOM,而且功能強大,支持 parse 和 read 同時進行,支持 xpath。當然具體問題需要具體分析。總體來講,DOM 所占用的內存要大于 SAX,除了 TBXML,TB 是非常簡單而有效率的。
NSXML | libxml2 – SAX | TBXML | TouchXML | KissXML | TinyXML | GDataXML | libxml2 – DOM | |
---|---|---|---|---|---|---|---|---|
Included with SDK? | Yes | Yes | No | No | No | No | No | Yes |
Seconds to Parse | 1.87 | 1.19 | 0.68 | 1.1 | 1.37 | 1.27 | 1.07 | 0.84 |
Peak Memory Usage | 3.11 | 3.01 | 3.07 | 6.5 | 5.25 | 4.8 | 4.15 | 4.97 |
Parse While Downloading? | No | Yes | No | No | No | No | No | No |
Edit/Save XML? | No | No | No | No | Yes | Yes | Yes | Yes |
XPath Support? | No | No | No | Yes | Yes | Yes* | Yes | Yes |
C or Obj-C | Obj-C | C | Obj-C | Obj-C | Obj-C | C | Obj-C | C |
License | Apple | MIT | MIT | MIT | MIT | ZLib | Apache | MIT |
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!