1:什么是XML解析

Extensible Markup language(可扩展标记语言)

Plist文件就是用XML格式存储文件的

</名字>表示结束标签

2:XML解析的几种方式

SAX:一行一行的去解析,费时

SAX,全称Simple API for XML,既是一种接口,也是一种软件包。它是一种XML解析的替代方法。SAX不同于DOM解析,它逐行扫描文档,一边扫描一边解析。由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档的解析是个巨大优势。

DOM:建立树形的结构,比SAX快很多

3:什么是JSON解析

JSON(JavaScript Object Notation)轻量级的数据交换格式

JSON解析的几种方式

JSONObjectWithData:   options:    error:      //使用缓冲区数据解析JSON

writeJSONObject:    toStream:     options:   error:  //使用文件流的形式解析JSON

  

XML解析:

SAX解析使用的协议:NSXMLParserDelegate

 

-  (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

//获取XML_stu.txt文件路径

NSString *path = [[NSBundle  mainBundle]pathForResource: @”XML_stu” ofType: @”txt”];

//通过文件路径  创建一个NSData对象

NSData *data = [NSData dataWithContentsOfFile:path];

//SAX解析使用类

NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];

//指定代理

parser.delegate = self;

//开始解析

[parser  parse];

 

}

 

//开始解析文档(只解析一次)

-  (void)parserDidStartDocument:(NSXMLParser *)parser{

//初始化数据源数组

self.dataArray = [NSMutableArray  array];

}

//检测到开始标签

- (void)parser:(NSXMLParser *)parser didStartElement:( NSString *)elementName namespaceURI:( NSString *)namespaceURI qualifiedName:( NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict

{

//给currentElement赋值

//如果标签的名字是student则表示要创建一个model,并添加到数据源数组里面

self.currentElement = elementName;

if([elementName isEqualToString: @”student”]){

 

Student  *model = [Student new];

[self.dataArray addObject:model];

 

}

 

}

 

//检测到标签中的值

-   (void)parser : (NSXMLParser *)parser foundCharacters:(NSString *)string{

 

//将检测的值存入model的具体属性

//知道给那个属性赋值,给那个model赋值,数组最后一个model赋值

Student *newmodel = [self.dataArray lastObject];

[newmodel setValue: string forKey : self.currentElement];

 

}

 

//检测到结束标签

 

-       (void)parser: (NSXMLParser *)parser didEndElement: (NSString *)elementName namespaceURI: (NSString *)namespaceURI  qualifiedName: (NSString *)qName{

 

self.currentElement = nil;

   }

 

//结束解析文档

-   (void)parserDidEndDocument : (NSXMLParser *)parser{

 

for(Student *stu in self.dataArray){

NSLog(@"%@, %@, %@, %ld",stu.name, stu.gender, stu.hobby, stu.age);

}

 

}

 

 

 

//GDataXMLDocument  XML的DOM解析使用类

 

//首先也是创建路径,通过路径获取数据

GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithData : data options:0 error:&error];

//第一个参数:解析Data对象

//第二个参数:一般为0

//第三个参数:error信息

 

//获取XML数据根节点

//获取到根节点里面所有的东西,也就是说获取到students里边包含的所有东西

GDataXMLDocument *rootElement = [document  rootElement];

for (GDataXMLElement *subElement in rootElement.children){

//获取到的subElement保存的就是student标签里边的内容,所以这里创建对象

Student *student = [Student new];

for(GDataXMLElement *element in subElement.children){

//element 保存的就是student标签的所有子标签

//根据标签的名字给属性赋值

if([element.name isEqualToString:@”name”]){

//element.name  表示标签名字

//element.stringValue   表示标签值

student.name = element.stringValue;

}

if ([element.name isEqualToString:@”gender”]){

student.gender = element.stringValue;

}

if([element.hobby isEqualToString:@”hobby”])

student.hobby = element.stringValue;

}

if ([element.name isEqualToString:@”age”]){

student.age = [element.stringValue integerValue];

}

}

[self.dataArray addobject:student];

 

}

 

for(Student *stu in self.dataArray){

NSLog(@”%@  %@  %@  %ld”,stu.name, stu.gender, stu.hobby, stu.age);

 

}

 

 

 

 

JSON解析

 

//第一种:

 

//创建路径,通过路径获取数据

NSString *path = [[NSBundle mainBundle]pathForResource:@”JSON_stu” ofType :@”txt”];

NSData *data = [NSData dataWithContentOfFile:path];

NSArray *array = [NSJSONSerialization  JSONObjectWithData:data  options:NSJSONReadingAllowFragments error:nil];

For(NSDictionary *dic in array){

 

NSLog(@”%@”, [dic objectForKey:@”content”]);

 

}

 

 

/*

 

NSJSONReadingMutableContainers      //返回一个数组或字典

NSJSONReadingMutableLeaves          //返回一个字符串

    NSJSONReadingAllowFragments         //返回一个任意类型的对象

 

*/

 

 

//第二种

touchesBegan方法里写

NSString *path = [[NSBundle mainBundle]pathForResource: @"JSON_stu" ofType:@"txt"];

NSData *data = [NSData dataWithContentsOfFile:path];

//将JSON数据转化为需要的数据格式

NSArray *array = [data objectFromJSONData];

posted on 2016-04-06 14:14  钎探穗  阅读(243)  评论(0编辑  收藏  举报