XML/JSON的几种解析方式
2014-06-25 16:35
351 查看
SAX方式解析XML数据
SAX:Simple API for XML。基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)NSXMLParser是iOS自带的XML解析类。采用SAX方式解析数据
解析过程:开始标签->取值->结束标签->取值
使用方式:
前提加入协议:<NSXMLParserDelegate>具体使用如下:
// SAX方式解析XML数据 // 1.获得xml数据 NSString *path = [[NSBundle mainBundle] pathForResource:@"student" ofType:@"xml"]; // 2.将路径下的文件转化为NSData NSData *data = [NSData dataWithContentsOfFile:path]; // 3.系统使用NSXMLPaser解析XML数据 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; // 4.设置代理 parser.delegate = self; // 5.开始解析 [parser parse];
#pragma mark - xml解析的协议方法 // 发现标题头 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { // NSLog(@"标题头%@", elementName); // 当节点头是student的时候 创建一个学生对象 if ([elementName isEqualToString:@"student"] == 1) { Student *stu = [[Student alloc] init]; [self.array addObject:stu]; [stu release]; } NSLog(@"%@", attributeDict); } // 发现内容 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { // NSLog(@"%@", string); self.valuesStr = string; } // 发现节点尾 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { Student *stu = [self.array lastObject]; if ([elementName isEqualToString:@"number"] == 1) { stu.number = [self.valuesStr integerValue]; } if ([elementName isEqualToString:@"name"] == 1) { stu.name = self.valuesStr; } if ([elementName isEqualToString:@"sex"] == 1) { stu.sex = self.valuesStr; } if ([elementName isEqualToString:@"phone"] == 1) { stu.phone = [self.valuesStr integerValue]; } }
DOM方式解析XML数据
DOM:Document Object Model(文档对象模型)。解析时需要将XML文件整体读入,并且将XML结构化成树状,使用再通过树状结构读取相关数据。GDataXMLNode是Google提供的开源XML解析类,对 libxml2.dylib进⾏行了Objective-C的封装
采用DOM方式解析数据
iOS中包含一个Cyuyan的动态链接库 libxml2.dylib,解析速度比NSXMLParser快
使用方式:
将GDataXMLNode.h GDataXMLNode.m 导入文件在Header Search Paths 中添加 /usr/include/libxml2
在Other Linker Flags 中添加 -lxml2
OK,完成导入文件
具体使用如下:
NSString *path = [[NSBundle mainBundle] pathForResource:@"student" ofType:@"xml"]; NSData *data = [NSData dataWithContentsOfFile:path]; // GDataXMLNode类的使用 // 1.获取xml文件的 文件结构 GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; // 2.获取xml文件的根节点(rootElement) GDataXMLElement *rootElement = [document rootElement]; // 3.获取 子节点(根据节点的名字) NSArray *elements = [rootElement elementsForName:@"student"]; // 4.循环 遍历 所有子结点, 进一步获取数据 for (GDataXMLElement *element in elements) { NSArray *nameElements = [element elementsForName:@"name"]; GDataXMLElement *nameNode = [nameElements firstObject]; NSString *name = [nameNode stringValue]; GDataXMLElement *numberElements = [[element elementsForName:@"number"] firstObject]; NSInteger number = [[numberElements stringValue] integerValue]; GDataXMLElement *sexElements = [[element elementsForName:@"sex"] firstObject]; NSString *sex = [sexElements stringValue]; GDataXMLElement *phontElements = [[element elementsForName:@"phone"]firstObject]; NSInteger phone = [[phontElements stringValue] integerValue]; Student *stu = [[Student alloc] init]; stu.name = name; stu.number = number; stu.sex = sex; stu.phone = phone; [_array addObject:stu]; [stu release]; } NSLog(@"%@", _array);
使用Foundation进行JSON解析
// 1.获得文件路径 NSString *path = [[NSBundle mainBundle] pathForResource:@"studentJSON" ofType:@"txt"]; NSData *data = [NSData dataWithContentsOfFile:path]; // 2.解析 id object = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@", object);
使用JSONKit进行JSON解析
JSONKit是Object-C一个处理json数据的库,非常高效而且易用。使用方法:
将包JSONKit导入到工程中具体使用如下:
NSString *path = [[NSBundle mainBundle] pathForResource:@"studentJSON" ofType:@"txt"]; NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; NSArray *arrlist = [str objectFromJSONString]; NSLog(@"%d", [arrlist count]); for (int i = 0; i < [arrlist count]; i ++) { NSDictionary *dic = [arrlist objectAtIndex:i]; NSString *name = [dic objectForKey:@"name"]; NSLog(@"%@", name); }
相关文章推荐
- string解析为json的几种方式(转)
- Android解析XML(PULL方式)和JSON 工作原理和实现过程(详细代码)
- XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
- spring application.xml在项目中的几种解析方式
- string解析为json的几种方式
- spring application.xml在项目中的几种解析方式
- spring application.xml在项目中的几种解析方式(正在整理中......)
- java解析xml的几种方式
- XML文档的几种解析方式
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- Java中解析xml的几种方式
- java解析xml的几种方式
- java解析xml常用的几种方式、
- XML几种解析方式
- java解析xml的几种方式
- iOS中关于json解析的几种方式
- java中解析xml文档有几种方式
- 回顾Android中解析XML的几种方式
- XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式