XML Parser 是做网络应用开发常用到的,iPhone SDK 自带了两个 libraries,除此之外还有很多第三方的 XML Parser libraries,包括 TBXML, TouchXML, KissXML, TinyXML, and GDataXML,这里就有一个问题,做开发的时候该选择哪一个适合自己的?CocoaChina 会员 “jjyycwy” 为我们做了具体介绍:
首先要清楚两个概念:SAX 和 DOM。
- SAX,Simple API for XML,属于 event driven,即所谓的事件驱动。当满足一定的条件时,相应的事件就会被驱动,常用的事件类似于ErrorOccur,DataRecieved。
- DOM,Document Object Model,简单来讲,就是要把文档完全下载完以后,然后对其里面的内容、objects等进行操作。
弄清两个概念,再来看都有哪些可以用的 Libraries。
- NSXMLParser,SAX 型,这是 iPhone SDK 自带的,用 Objective C 写的,直接用,但是并不是最简单的。
- libxml2,开源的,也是 SDK 自带的,用的是 C 语言,同时支持 SAX 和 DOM。它有一个非常好的特性,parse 和 read 同时进行,也就是说你不用等到整个文档下载完以后才读,比如你需要 parse 一个非常大的文件,你不希望用户等你 parse 完才看到内容,你可以这 parse 的同时把内容呈现出来。
- TBXML,特点是小,DOM 型,可以在低内存损耗的条件下快速提取内容,缺点也是太简单,不支持 xPath,并且只能读,不能写,也就是说,你读完了 xml,想修改里面的内容再发送,对不起,爷没这功能。
- TouchXML,特点几乎与上面那位一样,简单,只读不写,但是支持 xPath。
- KissXML,实际上是基于 TouchXML 的,只是增加了写的功能,可以编辑。
- TinyXML,是一个小的 C 语言 DOM 型,不支持 xPath。
- GDataXML,Google 开发的,基于 Objective-C 的 parser。
哪一个更好呢?
Apple 有一个叫 XMLPerformance的SampleCode,里面分别用 NSXMLParser 和 libxml2 两种方法 parse 了一个 900KB 大小的 xml 文件,300 首 iTunes 的歌。对于各种 parser 的方式,有个老美用自己的 iPhone 做了测试,结果如下图所示。
图中可以看出 SDK 自带的 NSXML 实际上是最慢的。TBXML 是最快的,当然,如前面所说,它简单,功能也少。个人觉得 libxml2 是比较好的方案,不仅同时支持 SAX 和 DOM,而且功能强大,支持 parse 和 read 同时进行,支持 xpath。当然具体问题需要具体分析。总体来讲,DOM 所占用的内存要大于 SAX,除了 TBXML,TB 是非常简单而有效率的。
帖子原地址 http://www.cocoachina.com/bbs/read.php?tid-47774.html,