标签:
//解析XML //1.SAX 逐行解析(系统提供)数据大使用 //1.1提供文件路径字符串 //获取文件1 NSString * filePath1=[[NSBundle mainBundle]pathForResource:@"data_XML1" ofType:@"txt"]; NSData * data1=[NSData dataWithContentsOfFile:filePath1]; //1.2XML解析器 NSXMLParser *parser1=[[NSXMLParser alloc]initWithData:data1]; //设置代理 parser1.delegate=self; //1.3启动解析器 [parser1 parse]; //显示解析得到的文档 for (Message *m in self.dataArray) { NSLog(@"sender:%@",m.sender); NSLog(@"receiver:%@",m.receiver); NSLog(@"content:%@",m.content); NSLog(@"date:%@",m.date); } #pragma mark --第一种文件格式 //开始解析文档 -(void)parserDidStartDocument:(NSXMLParser *)parser{ NSLog(@"第一种文件格式"); NSLog(@"开始解析文档"); self.dataArray=[NSMutableArray array];//初始化数组 } //解析到开始标签 -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{ NSLog(@"开始标签elementName=%@",elementName); //判断标签,创建对象 if ([elementName isEqualToString:@"message"]) { //检测到message 创建保存信息对象 Message * m=[[Message alloc]init]; //存入数组 [self.dataArray addObject:m]; } self.appendString=[NSMutableString string];//初始化拼接字符串 //以数字开头的时候,读两次-所以需要拼接字符串 //2015-10-19 11:10:46.411 内容string=2015 //2015-10-19 11:10:46.411 内容string=年10月19日 } //解析到内容标签 -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ NSLog(@"内容string=%@",string); //拼接字符串 [self.appendString appendString:string]; } //解析到结束标签 -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ NSLog(@"结束标签elementName=%@",elementName); //存入对象 Message *m=self.dataArray.lastObject;//排在最后 //存值-这种方式一个一个的赋值,如果标签太多就不方便了 // if ([@"sender" isEqualToString:elementName]) {m.sender=self.appendString;} // if ([@"receiver" isEqualToString:elementName]) {m.receiver=self.appendString;} // if ([@"date" isEqualToString:elementName]) {m.date=self.appendString;} // if ([@"content" isEqualToString:elementName]) { m.content=self.appendString;} //存值 使用KVC很方便 [m setValue:self.appendString forKey:elementName]; } //解析到错误 -(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{ NSLog(@"XML Error!");} //结束解析文档 -(void)parserDidEndDocument:(NSXMLParser *)parser{ NSLog(@"结束解析文档");}
1.2 .2 第二种格式(写在属性中)
//解析XML //1.SAX 逐行解析(系统提供)数据大使用 //1.1提供文件路径字符串 //获取文件2 NSString * filePath2=[[NSBundle mainBundle]pathForResource:@"data_XML2" ofType:@"txt"]; NSData * data2=[NSData dataWithContentsOfFile:filePath2]; //1.2XML解析器 NSXMLParser *parser2=[[NSXMLParser alloc]initWithData:data2]; //设置代理 parser2.delegate=self; //1.3启动解析器 [parser2 parse]; //显示解析得到的文档 for (Message *m in self.dataArray) { NSLog(@"sender:%@",m.sender); NSLog(@"receiver:%@",m.receiver); NSLog(@"content:%@",m.content); NSLog(@"date:%@",m.date); } #pragma mark --第二种文件格式 //第二种文件格式 -(void)parserDidStartDocument:(NSXMLParser *)parser{ self.dataArray=[NSMutableArray array]; NSLog(@"开始解析"); } -(void)parserDidEndDocument:(NSXMLParser *)parser{ NSLog(@"结束解析"); } -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{ //NSLog(@"attributeDict=%@",attributeDict); if ([elementName isEqualToString:@"message"]) { Message *m=[[Message alloc]init]; [m setValuesForKeysWithDictionary:attributeDict]; [self.dataArray addObject:m]; } }
标签:
原文地址:http://www.cnblogs.com/nathan1987/p/4892846.html