XML_SAX_解析本地文件

前端之家收集整理的这篇文章主要介绍了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);

}

原文链接:https://www.f2er.com/xml/296063.html

猜你在找的XML相关文章