XML教程適用於iOS:如何選擇最佳的XML性能解析器爲您的iPhone項目

有很多選擇,當談到關於iPhone的XML解析。 iPhone SDK中配有兩個不同的庫可供選擇,並有可用的幾種流行的第三方庫,例如TBXML,TouchXML,KissXML,TinyXML的,和GDataXML。 如何爲開發人員選擇最佳的XML解析器爲他們的項目?

我最近已經採取了看看各個選項在那裏,並最終延長蘋果的XMLPerformance樣品試用上述各圖書館,瞭解他們是如何工作的,並比較它們的性能。 我想我會分享我所學到迄今他人誰可能是爲尋找他們的iPhone項目的最佳XML庫。

在這個XML教程中,我們將給予的功能和最流行的iPhone圖書館性能的詳細比較,解釋如何在它們之間進行選擇,並給予說明如何使用上述各庫來讀取XML數據的示例項目。

SAX與DOM

在我們開始之前,我想確保每個人都意識到XML解析器之間最重要的區別:解析器是否是一個SAX或DOM解析器。

  • SAX解析器是一個地方你的代碼被通知作爲解析器在XML樹中散步,而你是負責保持狀態的跟蹤,構建你 ​​可能想通過跟蹤數據作爲解析器遊行的任何對象。
  • A A DOM解析器讀取整個文件,並建立一個在內存中的表示,你可以爲不同的元素進行查詢。 通常情況下,你甚至可以構建XPath查詢退出特別件。

好了,現在讓我們討論一些庫!

最流行的XML解析器的iPhone

在我的研究,這裏就是在我看來是最流行的XML解析器的iPhone,而且每一個簡要說明:

  • 的NSXMLParser是默認包含在iPhone SDK中的SAX解析器。 這是寫在Objective-C和非常簡單的使用,但也許不太一樣的DOM模型容易。
  • libxml2的是默認包含在iPhone SDK中的開源庫。 這是一個基於C的API,所以有點更多的工作比使用NSXML。 該庫同時支持DOM和SAX處理。 在libxml2的SAX處理器是特別爽,因爲它具有能夠分析數據,因爲它是被讀取一個獨特的功能。 例如,您可以從網絡讀取大型XML文檔並顯示數據,您正在閱讀它給用戶,而你還在下載。
  • TBXML是一個輕量級的DOM XML解析器設計,同時消耗很少的內存資源是儘可能快。 它節省了時間不進行驗證,不支持XPath和由被只讀 - 即你可以讀取XML有了它,但是你不能再修改XML中並重新寫回。
  • TouchXML是NSXML風格的DOM XML解析器的iPhone。 像TBXML,它也是隻讀的,但不像TBXML它支持XPath的。
  • KissXML是另一個NSSXML風格的DOM XML解析器的iPhone,實際上是基於TouchXML。 主要的區別是KissXML還支持編輯和編寫XML以及閱讀。
  • TinyXML的是一個小型的基於C語言的DOM的XML解析器,只包含4個C文件和兩個頭。 它同時支持讀取和寫入XML文檔,但是它不支持的XPath自身。 但是,您可以使用相關的庫 - TinyXPath - 爲。
  • GDataXML是另一個NSXML風格的DOM XML解析器的iPhone,谷歌通過他們的Objective-C的客戶端庫的一部分開發的。 只是由一個M檔和一個頭,它同時支持讀取和編寫XML文檔和XPath查詢。

好了,現在讓我們開始比較所有這些庫!

XML解析器的性能比較應用

XML Parser Stats Display in Test App

蘋果已經取得了被稱爲XMLPerformance一個極好的代碼示例,可以讓你比較它需要解析包含有兩個NSXML和libxml2的API的前300名iTunes的歌曲〜900KB的XML文檔的時間。

該示例允許您選擇一個分析方法,然後解析文檔,並將其保存在了多長時間下載的文件,並解析該文件在數據庫中的統計數據。 那麼你可以去統計屏幕上看到的平均下載和解析時間爲每個方法。

我想這將是測試出如何將這些不同的API對對方進行一種理想的方式,所以我擴展了樣本,以包括上述所有庫。 如果你想嘗試一下您的設備上,你可以下載下面的更新項目。 它也可作爲如何使用上述每個API的一個很好的例子!

下載更新XMLPerformance項目

該項目的說明:如果庫包含XPath的支持,我用了一個單一的查詢,因爲我覺得它代表了庫將在實踐中的使用方式。 但當然XPath是一般不是通過樹手動行走速度較慢,所以把它添加到基準這些庫。

所以無論如何 - 我將討論如何使用示例我的設備上執行這裏的東西寫成,是結果 - 但隨時給它一個鏡頭您的設備上,或調整的基礎上,實際的XML數據,您需要將代碼解析!

XML解析器的性能比較

下面是一些圖表,顯示瞭如何快速的各種解析器解析XML文檔我的裝置(iPhone 3Gs的)上:

Parsing Time By Parser

正如你可以在這裏看到,的NSXMLParser是迄今爲止最慢的方法。 TBXML是最快的,這是有道理的,因爲很多功能被剔除,以優化分析時爲只讀。

我很驚訝,但是,看到TBXML和其他一些DOM解析方法進行比libxml2的SAX解析器,我原以爲會是最快所有的方法更快。 我沒有異形,但我的猜測,爲什麼它是慢是因爲頻繁的字符串進行比較需要解析文檔中的SAX方法。

然而,不打折的libxml2的SAX方法,通過看這個圖。 請記住,libxml2的是這些方法,可以解析文檔,因爲它是閱讀的只有一個 - 所以它可以讓你的應用程序開始顯示數據的時候了,而不是讓下載完成第一。

好吧,這裏有一個圖表,顯示由解析器(這是通過通過對象分配工具運行的各種方法獲得)的峯值內存使用:

Memory Usage By Parser

請注意,DOM方法通常需要比SAX的方法(除了TBXML,這確實是相當有效率的)更多的內存開銷。 這一點,當你正在處理的特別大的文檔來考慮,鑑於在iPhone上的內存限制。

還要注意的是libxml2的的SAX方法是最好的選擇,據峯值內存使用量而言(我懷疑它會規模比別人更好的爲好)。

最後,讓我們換了一個圖表,總結了解析器和一切我們上面已經討論之間的差異:

  NSXML libxml2的 - SAX TBXML TouchXML KissXML TinyXML的 GDataXML libxml2的 - DOM
附帶的SDK? 是的 是的 是的
秒的解析 1.87 1.19 0.68 1.1 1.37 1.27 1.07 0.84
峯值內存使用量 3.11 3.01 3.07 6.5 5.25 4.8 4.15 4.97
解析雖然下載? 是的
編輯/保存XML? 是的 是的 是的 是的
XPath的支持? 是的 是的 有* 是的 是的
C或對象 - OBJ-C Ç OBJ-C OBJ-C OBJ-C Ç OBJ-C Ç
許可證 蘋果 麻省理工學院 麻省理工學院 麻省理工學院 麻省理工學院 的ZLib 阿帕奇 麻省理工學院

* =與TinyXPath

選擇哪一個?

其中的XML解析器來選擇實際上取決於你想要做的解析器什麼。

  • 如果你只是想讀小XML文檔 ,性能並不重要一樣多的小文件。 你可能想撿東西使用XPath的支持,而且是寫在Objective-C中,使您的工作更輕鬆一些。 所以我建議要麼TouchXML,KissXML,或GDataXML這種情況。
  • 如果你想讀取和寫入小XML文檔 ,再次表現並不重要不亞於功能性和易用性。 你可能想撿東西與XPath的支持,寫在Objective-C,具有讀/寫能力。 所以我建議KissXML或GDataXML這種情況。
  • 如果你想閱讀非常大的XML文檔 ,性能是最關鍵的問題在這裏。 你要考慮libxml2的SAX的,TBXML,或的libxml的DOM對於這一點,這取決於您的具體情況。

那麼那些我沒有提到?

  • NSXML是,如果你正在處理的比較小的文件,一個體面的選擇,你不覺得像增加一個第三方庫的SDK。
  • TinyXML的可能是中等大小的文件一個確定的選擇,如果您已經擁有了API的經驗,並熟悉C,因爲它的端口很容易地超過了iPhone。

我這次調查(VTD-XML和目標,XML)的過程中,看了看另外兩個XML庫,但我不能讓他們的工作。 如果別人已經有更多的運氣有了這些,隨意延長示例項目,包括他們!

凡要何去何從?

如果你正在尋找使用這些庫中的一個一定的幫助,看看我的帖子如何讀取和編寫XML文檔與GDataXML 。

如果有任何人對這些庫或提示,可以幫助其他開發人員的任何額外的反饋,請幫腔下!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章