iOS_解析XML :KissXML、XmlReader

来源:互联网 发布:淘宝直通车产品在哪里 编辑:程序博客网 时间:2024/05/16 08:38

iOS_解析XML(很实用的两框架:KissXML、XmlReader)

关于网络返回的数据进行解析,一般有JSON解析和XML解析,JSON解析几乎没有任何技术含量,使用反序列化即可(NSJSONSerialization) ,解析XML确实有点技术含量,但是吧很多朋友却总在纠结DOM解析和SAX解析,其实还是有很多框架可以用的,下面介绍两个实际工作中常用的两个框架:KissXML和XmlReader

准备资料:
  1. 一个XML的文件:demo.xml
  2. 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);      
转自  http://www.jianshu.com/p/2eb1c93d75bb

0 0