XML_SAX_解析本地文件
第一步:把文件拖入工程中。 第二步:创建一个与这个文件对应的Model模型,在.h中声明对应的属性,在.m中定义两个方法。
@implementation Student //防止KVC出错:这是为不识别的key重写的方法 -(void)setValue:(id)value forUndefinedKey:(NSString *)key { if ([key isEqualToString:@"int"]) { _age = [value integerValue ]; }else if ([key isEqualToString:@"NSString"]) { _gender = value ; }
//打印出崩溃信息 NSLog(@"key:%@",key);
} //debug模式校验对象--调试模式下 -(NSString *)description { return [NSString stringWithFormat:@"name:%@,age:%ld,gender:%@,hobby:%@,phone:%@",_name,_age,_gender,_hobby,_phone]; } @end 第三步:开始解析 //1.获取文件路径 NSString *path = [[NSBundle mainBundle] pathForResource:@"StudentInfo_XML" ofType:@"txt"];
//2.根据文件路径来创建data对象 NSData *data = [[NSData alloc]initWithContentsOfFile:path];
//3.根据data对象来创建解析对象 NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
//4.设置代理对象 [parser setDelegate:self];
//6.开始解析命令-->实现协议方法 [parser parse]; 其中,第5步为:遵循协议
//5.遵循协议 @interface ViewController ()<NSXMLParserDelegate> 第四步:实现代理方法
#pragma mark -- SAX 代理步骤 -- //1.开始文档解析 -(void)parserDidStartDocument:(NSXMLParser *)parser { //准备数组--一次性给我至少6个指针单位的空间,在前一个数上翻倍,6-12-24-48-... _array = [[NSMutableArray alloc]initWithCapacity:6];
} //2.开始标签解析 -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { //记录当前标签 _currentElement = elementName;
//根据标签建立Model if ([elementName isEqualToString:@"Student"]) { Student *student = [Student new];
[_array addObject:student]; } } //3.获取标签内容 -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { //获取数组最后一个元素 Student *student = [_array lastObject];
//KVC赋值 [student setValue:string forKey:_currentElement];
} //4.结束标签解析 -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { //当前存储节点置为空,不影响下一次判断 _currentElement = nil; } //后面两步只是在自己写的时候会有,产品上线不要有 //5.结束文档解析 -(void)parserDidEndDocument:(NSXMLParser *)parser { //校验数据 for (Student *student in _array) { NSLog(@"--》%@",student); } } //6.错误处理 -(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { NSLog(@"错误为:%@",parseError); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c# – LINQ:如何将元素列表附加到另一个列表中
- 【JavaWeb-3】XML的解析与XPath的使用
- Binary XML file line #2: You must supply a layout_heigh
- ReactJS – 警告:React.createElement:type不应为null
- c# – 在ASP.NET Core 2中排除文件夹
- ruby – 为什么map {} .compact比each_with_object([])更快
- Objective-C:从超类获取子类列表
- C# 中的 bool、char 和 string 类型
- Sitecore工作流程和管道
- React Native将license修改为MIT意欲何为