iOS XML,JOSN数据解析
2016-01-13 21:57
441 查看
解析:按照事先约好的格式提取数据的过程叫做解析
后台开发人员按照约好的数据存
4000
入格式,前台按照约好的格式读取数据
iOS开发常⻅见的解析:XML解析、JSON解析
XML解析:
主流格式:SAX, DOM(前台与后台都可以识别)
XML解析的工作原理
1.SAX:基于事件回调的解析机制,逐行进行解析,效率低,适合海量数据
2.DOM:将解析的数据整体读入内存,初始化树形结构,逐行解析,效率高,适合于小量数据,谷歌提供了一个解析用的第三方,GDataXMLNode
//SAX解析
JSON解析(简单,也是最常用的)
后台开发人员按照约好的数据存
4000
入格式,前台按照约好的格式读取数据
iOS开发常⻅见的解析:XML解析、JSON解析
XML解析:
主流格式:SAX, DOM(前台与后台都可以识别)
XML解析的工作原理
1.SAX:基于事件回调的解析机制,逐行进行解析,效率低,适合海量数据
2.DOM:将解析的数据整体读入内存,初始化树形结构,逐行解析,效率高,适合于小量数据,谷歌提供了一个解析用的第三方,GDataXMLNode
//SAX解析
//1.找到.xml文件的路径 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"]; //2.根据路径获取该路径下文件里的数据 NSData *data = [NSData dataWithContentsOfFile:filePath]; //3.进行SAX解析 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; //设置代理 parser.delegate = self; //通知parser对象开始解析 [parser parse]; [parser release];
#pragma mark - NSXMLParserDelegate - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ //如果判断走到Student的开始标签时创建一个Student对象 if ([elementName isEqualToString:@"Student"]) { self.student = [[Student alloc] init]; self.student.position = attributeDict[@"position"]; } // NSLog(@"%@", attributeDict[@"position"]); } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ self.value = string; } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ if ([elementName isEqualToString:@"name"]) { self.student.name = self.value; }else if ([elementName isEqualToString:@"gender"]){ self.student.gender = self.value; }else if ([elementName isEqualToString:@"motto"]){ self.student.motto = self.value; }else if ([elementName isEqualToString:@"Student"]){ [self.dataSource addObject:self.student]; } } - (void)parserDidEndDocument:(NSXMLParser *)parser{ [self.tableView reloadData]; } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.dataSource.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; // Configure the cell... Student *stu = self.dataSource[indexPath.row]; cell.textLabel.text = [NSString stringWithFormat:@"%@ %@ %@ %@", stu.name, stu.gender, stu.motto, stu.position]; return cell; }//DOM解析(两种方式1.从上往下找(从根节点往下寻找)2.直接找)
<span style="font-size:18px;">[self.dataSources removeAllObjects]; NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"]; //对象是error的时候要传取值符 NSError *error = nil; NSString *string = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; //1.将数据整体存入内存 GDataXMLDocument *document = [[[GDataXMLDocument alloc] initWithXMLString:string options:0 error:nil] autorelease]; //2.找到根节点 GDataXMLElement *rootElement = [document rootElement]; //3.找student节点 NSArray *studentElement = [rootElement elementsForName:@"Student"]; //遍历获取到对应的叶子节点 for (GDataXMLElement *obj in studentElement) { GDataXMLElement *nameElement = [[obj elementsForName:@"name"] firstObject]; GDataXMLElement *genderElement = [[obj elementsForName:@"gender"] firstObject]; GDataXMLElement *mottoElement = [[obj elementsForName:@"motto"] firstObject]; Student *student = [[[Student alloc] init] autorelease]; //将叶子节点中的值赋给对应的对象 student.name = [nameElement stringValue]; student.gender = [genderElement stringValue]; student.motto = [mottoElement stringValue]; //获取节点中的标签值(属性值) GDataXMLNode *node = [obj attributeForName:@"position"]; student.position = [node stringValue]; [self.dataSources addObject:student]; } [self.tableView reloadData]; </span>2.DOM直接找
<span style="font-size:18px;">[self.dataSources removeAllObjects]; NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"]; //对象是error的时候要传取值符 NSError *error = nil; NSString *string = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; //1.将数据整体存入内存 GDataXMLDocument *document = [[[GDataXMLDocument alloc] initWithXMLString:string options:0 error:nil] autorelease]; //2.直接通过相对路径找到叶子节点 NSArray *stus = [document nodesForXPath:@"//Student" error:nil]; NSArray *names = [document nodesForXPath:@"//name" error:nil]; NSArray *genders = [document nodesForXPath:@"//gender" error:nil]; NSArray *mottos = [document nodesForXPath:@"//motto" error:nil]; // NSArray *positions = [document nodesForXPath:@"//Student" error:nil]; for (int i = 0; i < 3; i++) { //创建对象 Student *stu = [[Student alloc] init]; //取出对应的叶子节点 GDataXMLElement *name = names[i]; GDataXMLElement *gender = genders[i]; GDataXMLElement *motto = mottos[i]; // GDataXMLElement *position = positions[i]; GDataXMLElement *stuElement = stus[i]; //给对象对应的属性赋值 stu.name = [name stringValue]; stu.gender = [gender stringValue]; stu.motto = [motto stringValue]; GDataXMLNode *node = [stuElement attributeForName:@"position"]; stu.position = [node stringValue]; //将对象放入数组 [self.dataSources addObject:stu]; [stu release]; } [self.tableView reloadData]; } </span>
JSON解析(简单,也是最常用的)
<span style="font-size:18px;">//1.找到.json文件的路径 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"json"]; //2.根据路径获取该路径下文件里的数据 NSData *data = [NSData dataWithContentsOfFile:filePath]; //3.解析 NSError *error = nil; NSMutableArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; // NSLog(@"%@", arr); for (NSDictionary *dic in arr) { Student *stu = [[Student alloc] initWithDictionary:dic]; [self.dataSourse addObject:stu]; } [self.tableView reloadData]; </span>
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- XML 与 JSON 优劣对比
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- VBA将excel数据表生成JSON文件
- As3.0 xml + Loader应用代码
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码
- newtonsoft.json解析天气数据出错解决方法
- C#针对xml基本操作及保存配置文件应用实例
- Ruby程序中创建和解析XML文件的方法
- asp下查询xml的实现代码
- sqlserver FOR XML PATH 语句的应用
- 使用sp_xml_preparedocument处理XML文档的方法