background image

了解

iOS 中 XML 解析

    iOS 中 XML 解析是本文要介绍的内容,在 iPhone 开发中,XML 的解析有很多选择,iOS 
SDK 提供了 NSXMLParser 和 libxml2 两个类库,另外还有很多第三方类库可选,例如
TBXML、TouchXML、KissXML、TinyXML 和 GDataXML。问题是应该选择哪一个呢?

    解析 XML 通常有两种方式,DOM 和 SAX:

    DOM 解析 XML 时,读入整个 XML 文档并构建一个驻留内存的树结构(节点树),通
过遍历树结构可以检索任意

XML 节点,读取它的属性和值。而且通常情况下,可以借助

XPath,直接查询 XML 节点。

    SAX 解析 XML,是基于事件通知的模式,一边读取 XML 文档一边处理,不必等整个文
档加载完之后才采取操作,当在读取解析过程中遇到需要处理的对象,会发出通知对其进
行处理。

    一般在 iOS 平台下,比较常用的 XML 解析类库有如下几种:

    NSXMLParser,这是一个 SAX 方式解析 XML 的类库,默认包含在 iOS SDK 中,使用也
比较简单。

    libxml2,是一套默认包含在 iOS SDK 中的开源类库,它是基于 C 语言的 API,所以使用
起来可能不如

NSXML 方便。这套类库同时支持 DOM 和 SAX 解析,libxml2 的 SAX 解析方

 

式还是非常酷的,因为它可以边读取边解析,尤其是在从网上下载一个很大的

XML 文件,

就可以一边下载一边对已经下载好的内容进行解析,极大的提高解析效率。

    TBXML,这是一套轻量级的 DOM 方式的 XML 解 析类库,有很好的性能和低内存占用,
不过它不对

XML 格式进行校验,不支持 XPath,并且只支持解析,不支持对 XML 进行修

改。

    TouchXML,这也是一套 DOM 方式的 XML 解析类库,支持 XPath,不支持 XML 的修改。

    KissXML,这是一套基于 TouchXML 的 XML 解析类库,和 TouchXML 相比,支持了
XML 的修改。

    TinyXML,这是一套小巧的基于 C 语言的 DOM 方式进行 XML 解析的类库,支持对
XML 的读取和修改,不直接支持 XPath,需要借助另一个相关的类库 TinyXPath 才可以支

XPath。

    那么对于如何在项目中选择合适的 XML 解析类库呢?网上已经有人对这几款 XML 类库
做过分析和对比,建议:

    如果是读取很小的 XML 文档,性能基本上没有什么差别,不过从调用的方便性来说,