代码改变世界

如何选择你的iPhone XML解析器

2010-08-27 10:59  Tracy E  阅读(1335)  评论(0编辑  收藏  举报

 

XMLPerformance测试应用程序扩展到比较第三方库

有很多选择,当谈到关于iPhone的XML解析。 在iPhone SDK中配有两个不同的库可供选择,并有几种流行的资料,例如TBXML,TouchXML,KissXML,TinyXML的第三方库和GDataXML。 发展商如何选择?

最近我一直在考虑了各种选择在那里寻找,并最终延长苹果XMLPerformance样品试用上述各图书馆,了解他们如何运作,并比较它们的性能。 想我会分享我所学到迄今他人谁可能是为他们的iPhone项目的最佳XML库搜索。

在本文中,我们将给予的功能和最流行的iPhone图书馆性能的详细对比,说明它们之间如何选择,给一个示例项目演示如何读取使用上述库每个XML数据。


SAX的主迎战的DOMXMLPerformance Test App Extended For 3rd Party Libraries

在我们开始之前,我想确保每个人之间最重要的区别XML解析器知道:是否是一个SAX解析器或一个DOM解析器。

  • SAX解析器是在你的代码分析器通知作为遍历XML树,你是通过负责保持跟踪状态和建设的任何对象你可能想游行保持分析器跟踪的数据。
  • 甲的DOM解析器读取整个文件,并建立了一个在内存中的表示,你可以查询不同的元素。 通常情况下,你甚至可以构建XPath查询退出特别件。

好吧,现在让我们讨论的一些库!

最受欢迎的XML分析器为iPhone

在我的研究,这里就是在我看来是为iPhone最流行的XML解析器,以及每个一简要介绍:

  • NSXMLParser是一个SAX解析器SDK中包含的iPhone默认的。 这是写在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,让您所花费的时间比较分析一个〜900KB的XML文件,其中前300的iTunes同时与NSXML libxml2的宣传短片和歌曲。

该示例允许您选择一个分析方法,然后分析该文件,并就如何保持长时间才下载的文件,并解析数据库中的文件的统计。 然后,您可以到屏幕上看到一个统计,平均每个方法下载和解析时间。

我认为这将是一个理想的方法来测试各种API如何相互执行,使我扩大了样本,以包括上述图书馆。 你可以下载下面如果您想尝试它在您的设备更新项目。 它也可作为如何使用上述API的每个好例子!

下载更新XMLPerformance项目

关于该项目的说明:如果库中包含XPath的支持,我用一个单一的查找它,因为我觉得它代表了该图书馆将在实践中使用的方式。 但当然XPath是一般较手动通过树走的更慢,所以增加了对这些图书馆的基准。

因此,无论如何 - 我将讨论如何执行情况与样本上写我的设备这里,是结果 - 但随时给它一个在您的设备,或者调整对实际的XML数据,你需要的代码镜头解析!

XML解析器的性能比较

下面是一些图,显示了如何快速解析各种解析器对我的设备(1部3G版iPhone的XML文档):

Parsing Time By Parser

正如你可以在这里看到,NSXMLParser是迄今为止最慢的方法。 TBXML是最快的,这是有道理的,因为很多功能被剔除,以优化只读解析时间。

我很惊讶,但是,看到TBXML和其他一些DOM的解析方法进行速度比的libxml2的SAX解析器,我原以为将是最快的方法所有。 我没有异型,但以我的猜测为什么它是慢,因为经常需要比较字符串中的SAX解析方法的文件。

但是,不要在这个折扣的图表看的libxml2的SAX方法。 请记住,libxml2的是这些方法,可以分析该文件,因为它的阅读中,只有1 - 因此它可以让你的程序立刻开始显示数据而不是让下载排名榜首。

好吧,这里有一个图表,显示由解析器高峰内存使用(这是通过运行通过对象分配工具的各种方法获得):

Memory Usage By Parser

请注意,DOM方法通常需要更多的内存比SAX的方法与TBXML,这确实是相当有效的异常(开销)。 这是值得考虑当您正在处理的,特别是大文件,得出了一个iPhone的内存限制。

此外请注意的libxml2的SAX的方法是最好的选择,因为据峰值内存使用量而言(我怀疑它的规模比其他人的声音)。

最后,让我们的总结与概括的图表分析器之间的一切,我们已经讨论了上述的差异:

NSXMLlibxml2的 - 的SAXTBXMLTouchXMLKissXMLTinyXML的GDataXMLlibxml2的 - 的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的 ç 的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 。

如果任何人有任何有关这些库或提示,可以帮助其他开发者进行反馈,请在下面编钟!


(注:直接google翻译过来的,没时间修改,凑合着看吧。反正是介绍性的文章,容易理解)