第一步:把文件拖入工程中。
第二步:创建一个与这个文件对应的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);
}