各種解析XML的iOS類庫對比

jopen 10年前發布 | 15K 次閱讀 IOS XML操作類庫

      在iPhone開發中,XML的解析有很多選擇,僅iOS SDK就提供了 NSXMLParserlibxml2兩個類庫,還有如 TBXMLTouchXMLKissXMLTinyXMLGDataXML等第三方類庫。

解析XML通常有兩種方式:DOM和SAX

  •  DOM解析XML時,讀入整個XML文檔并構建一個駐留內存的樹結構(稱“節點樹”),之后就通過遍歷樹結構可以檢索任意XML節點,讀取它的屬性和值。而起通常情況下,可以借助XPath,直接查詢XML節點。
  • SAX解析XML,是基于事件通知的模式,一邊讀取XML文檔一邊處理,不必等整個文檔加載完之后才采取操作,當在讀取解析過程中遇到需要處理的對象,會發出通知對其進行處理。
  • </ul>

    一般在iOS平臺下,比較常用的XML解析類庫有如下幾種:

    1. NSXMLParser     這是一個SAX方式解析XML的類庫,默認包含在iOS SDK中,使用也比較簡單。(下次專門總結學習)
    2. libxml2     是一套默認包含在iOS SDK中的開源類庫,它是基于C語言的API,所以使用起來相對不太方便,但它同時支持DOM和SAX解析,尤其是它的SAX解析方式很酷,可以邊讀邊解 析,非常適用于從網上下載一個很大的XML文件,可極大提供解析效率。
    3. TBXML     是一套輕量級的DOM方式的XML解析類庫,有很好的性能和低內存占用,不過它不對XML格式進行校驗,不支持XPath,并且只支持解析,不支持對XML進行修改。
    4. TouchXML   這也是一套DOM方式的XML解析類庫,支持XPath,不支持XML的修改。
    5. KissXML   這是一套基于TouchXML的XML解析類庫,只不過實現了支持XML的修改。 
    6. TinyXML   這是一套小巧的基于C語言的DOM方式進行XML解析的類庫,支持對XML的讀取和修改,不直接支持XPath,需要借助TinyXPath才可以支持XPath。
    7. GDataXML  它是Google開發的DOM方式XML解析類庫,支持讀取和修改XML文檔,支持XPath方式查詢。
    8. </ol>

      以上幾大類庫,在讀取很小的XML文檔上,性能基本沒有差別,不過從調用的方便性來說,建議使用TouchXML、KissXML或GDataXML。

      如果是需要讀取和修改XML文檔,建議使用KissXML或GDataXML。

      如果需要讀取非常大的XML文檔,則建議使用libxml2或TBXML。

      不想使用第三方類庫,則就使用iOS自帶的NSXMLParser。

      各種解析XML的iOS類庫對比

             圖中可以看出 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!