iOS_解析XML(很实用的两框架:KissXML、XmlReader)
关于网络返回的数据进行解析,一般有JSON解析和XML解析,JSON解析几乎没有任何技术含量,使用反序列化即可(NSJSONSerialization) ,解析XML确实有点技术含量,但是吧很多朋友却总在纠结DOM解析和SAX解析,其实还是有很多框架可以用的,下面介绍两个实际工作中常用的两个框架:KissXML和XmlReader
准备资料:
- 一个XML的文件:demo.xml
- xml内容为:
<Class className = "sannianerban"> <Student name = "赵四" age = "18"/> <Student name = "赵四1" age = "118"/> </Class>
框架一、KissXML
一)、简介:
- 有人说简单,有人说麻烦,,,我觉得:此处省略一万字。
二)、配置
1、添加附件里面的KissXML到工程
2、加入libxml2.tbd 到Frameworks
3、修改工程信息,右击Targets下工程名选“Build Settings”,进入Header Search Paths添加:/usr/include/libxml2,
4、引用头文件:#import "DDXML.h"
三)、使用
//获取xml路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"demo.xml" ofType:nil];
NSString *xmlString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
DDXMLDocument *doc = [[DDXMLDocument alloc] initWithXMLString:xmlString options:0 error:nil];
//开始解析
NSArray *children = [doc nodesForXPath:@"//Student" error:nil];
//遍历每个元素
for (DDXMLElement *obj in children) {
NSString *name =[[obj attributeForName:@"name"] stringValue];
NSString *age =[[obj attributeForName:@"age"] stringValue];
NSLog(@"name = %@,age = %@",name,age);
}
框架二、XMLReader
一)、简介:
- XmlDocument和XElement在读取Xml时要将整个Xml文档放到内存中去操作,这样做操作简单,但是很费内存和IO(可能是磁盘IO或者网络IO);而在有些场景下我们必须考虑尽可能节省内存和IO的开销,就考虑XmlReader
XmlReader读取Xml需要通过Read()实例方法,不断读取Xml文档中的声明,节点开始,节点内容,节点结束,以及空白等等,直到文档结束,Read()方法返回false。 - XmlReader是基于数据流的,占用极少的内存,是只读方式的,所以速度极快.只能采用遍历的模式查找数据节点。
二)、使用:
引用头文件:#import "XMLReader.h"
//1. 本地获取XML,并转化为NSData类型
NSString *path = [[NSBundle mainBundle] pathForResource:@"demo.xml" ofType:nil];
NSURL *url = [NSURL fileURLWithPath:path];
NSData *data = [NSData dataWithContentsOfURL:url];
//2. 开始转化
NSError *error;
NSDictionary *dic = [XMLReader dictionaryForXMLData:data error:&error];
//3. 打印出来之后,自己字典转模型吧,这个不用我教吧??
NSLog(@"把内容字典转模型 = %@",dic);