有以下两种方法:
1、SAX解析
SAX:Simple API for XML
.基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)
SAX
解析XML,是基于事件通知的模式,一边读取XML文档一边处理,不必等整个文档加载完之后才采取操作,SAX
解析器会检测整个XML树形结构,你的代码会控制它在哪里停止,使用哪些数据之类的事情。就是说,SAX
可控制性强,占用内存小,适用于提取部分数据。当在读取解析过程中遇到需要处理的对象,会发出通知对其进行处理,如果XML格式在某一处出现错误,前面的数据会被提取出来,错误后面数据的就显示不出来。
NSXMLParse
类是iOS自带的XML解析类。采用SAX
方式解析数据
解析过程由NSXMLParserDelegate
协议方法回调
解析过程:开始标签->取值->结束标签->取值
代码的实现过程是,首先我们建立一个XML文档,并引入文件,如下:
其次我们建立一个表格试图控制器(TableViewController
)
定义一个私有属性数组datasource
用来存储模型数据和startTag
属性用来暂存起始标签
同时在方法ViewDidLoad
里面获取文件数据并指定代理<NSXMLParserDelegate>//解析器协议,同时为对应的重用标识符注册单元格的类型
NSXMLParserDelegate
解析器协议里面有如下方法:
当XML在逐个解析文件数据时,由于起始标签和结束标签名字一样,当解析到结束标签时,为了避免解析到的结束标签后面的内容将模型对象中的相应的属性覆盖,在解析结束标签的方法内部将起始标签置为nil
在每个方法内部我们同时打印了一下方法名,这样我们就可以在输出端清晰的看到方法的执行顺序,
同时在表格的设置方法内部建立重建机制
2、DOM工具解析
DOM:Document Object Model
(文档对象模型)。解析时需要将XML文件整体读入,并且将XML结构化成树状,使用时再通过树状结构读取相关数据,查找特定节点,然后对节点进行读或写。他的主要优势是实现简单,读写平衡;缺点是比较占内存,因为他要把整个xml文档都读入内存,文件越大,这种缺点就越明显。当文件内容出现错误时,在输入框内会标记出错误的位置
GDataXMLNode
是Google提供的开元XML解析类,对libxml2.dylib
进行了Objective-C的封装,因此在使用GDataXML
之前,你需要先导入libxml2
。
iOS中包含一个C语言的动态链接库libxml2.dylib
,解析速度比NSXMLParser
快