XML教程适用于iOS:如何选择最佳的XML解析器为您的iPhone项目

前端之家收集整理的这篇文章主要介绍了XML教程适用于iOS:如何选择最佳的XML解析器为您的iPhone项目前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

XML教程适用于iOS:如何选择最佳的XML解析器为您的iPhone项目

雷Wenderlich

如果你是新这里,你可能想订阅我的RSS提要,或按照我的Twitter的感谢您访问!

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

有很多选择,当谈到关于iPhone的XML解析。iPhone SDK中配有两个不同的库可供选择,并有可用的几种流行的第三方库,例如TBXML,TouchXML,KissXML,TinyXML的,和GdataxML。如何为开发人员选择最佳的XML解析器为他们的项目?

我最近已经采取了看看各个选项在那里,并最终延长苹果的XMLPerformance样品试用上述各图书馆,了解他们是如何工作的,并比较它们的性能我想我会分享我所学到迄今他人谁可能是为寻找他们的iPhone项目的最佳XML库。

在这个XML教程中,我们将给予的功能和最流行的iPhone图书馆性能的详细比较,解释如何在它们之间进行选择,并给予说明如何使用上述各库来读取XML数据的示例项目。

SAX与DOM

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

  • SAX解析器是一个地方你的代码通知作为解析器在XML树中散步,而你是负责保持状态的跟踪,构建你 ​​可能想通过跟踪数据作为解析器游行的任何对象。
  • AADOM解析器读取整个文件,并建立一个在内存中的表示,你可以为不同的元素进行查询通常情况下,你甚至可以构建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解析器的性能比较应用

苹果已经取得了被称为XMLPerformance一个极好的代码示例,可以让你比较它需要解析包含有两个NSXML和libxml2的API的前300名iTunes的歌曲〜900KB的XML文档的时间。

该示例允许您选择一个分析方法,然后解析文档,并将其保存在了多长时间下载的文件,并解析该文件数据库中的统计数据。那么你可以去统计屏幕上看到的平均下载和解析时间为每个方法

我想这将是测试出如何将这些不同的API对对方进行一种理想的方式,所以我扩展了样本,以包括上述所有库。如果你想尝试一下您的设备上,你可以下载下面的更新项目。它也可作为如何使用上述每个API的一个很好的例子!

下载更新XMLPerformance项目

该项目的说明:如果库包含XPath的支持,我用了一个单一的查询,因为我觉得它代表了库将在实践中的使用方式。但当然XPath是一般不是通过树手动行走速度较慢,所以把它添加到基准这些库。

所以无论如何 - 我将讨论如何使用示例我的设备上执行这里的东西写成,是结果 - 但随时给它一个镜头您的设备上,或调整的基础上,实际的XML数据,您需要将代码解析!

XML解析器的性能比较

下面是一些图表,显示了如何快速的各种解析器解析XML文档我的装置(iPhone 3Gs的)上:

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

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

然而,不打折的libxml2的SAX方法,通过看这个图。请记住,libxml2的是这些方法,可以解析文档,因为它是阅读的只有一个 - 所以它可以让你的应用程序开始显示数据的时候了,而不是让下载完成第一。

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

请注意,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

如果有任何人对这些库或提示,可以帮助其他开发人员的任何额外的反馈,请帮腔下!

猜你在找的XML相关文章