SAX解析

作者: 艾克12138 | 来源:发表于2016-06-25 20:57 被阅读31次

    #import "ViewController.h"

    #import "Student.h"

    //一共要3步.第一引入libxml2.tbd//2.-fno-objc-arc//3./usr/include/libxml2

    @interface ViewController ()<NSXMLParserDelegate>

    @property(nonatomic,strong)NSString *currentlement;//存放当前节点

    @property(nonatomic,strong)NSMutableArray *array;//存放解析出来的模型

    @end

    @implementation ViewController

    -(NSMutableArray *)array{

    if (!_array) {

    _array = [NSMutableArray array];

    }return _array;

    }

    - (void)viewDidLoad {

    [super viewDidLoad];

    NSLog(@"SAX解析");

    //1.获取文件路径

    NSString *filepath = [[NSBundle mainBundle]pathForResource:@"XML_stu" ofType:@"txt"];

    //2.创建data

    NSData *data = [NSData dataWithContentsOfFile:filepath];

    //3.创建解析对象

    NSXMLParser *parser =[[NSXMLParser alloc]initWithData:data];

    //4.遵循协议设置代理

    parser.delegate = self;

    //5.开始解析

    [parser parse];

    }

    //实现协议方法

    //1.开始解析

    -(void)parserDidStartDocument:(NSXMLParser *)parser{

    NSLog(@"开始解析");

    }

    //2.开始解析标签-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary*)attributeDict{

    //获取当前节点

    NSLog(@"%@",elementName);

    self.currentlement =elementName;

    //这一步的作用是根据节点提供的数据,来创建对应的modle(没有复制过程,只是创建模型)

    if ([elementName isEqualToString:@"student"]) {

    //初始化一个学生对象

    Student *stu =[[Student alloc]init];

    [self.array addObject:stu];

    }

    //3.读取标签的值

    -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

    NSLog(@"%@",string);

    //我们需要数组里面最后一个值

    Student *stu =self.array.lastObject;

    //使用KVC编码赋值

    [stu setValue:string forKey:self.currentlement];

    }

    //4.结束标签解析

    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    NSLog(@"%@",elementName);

    self.currentlement =nil;

    }

    //5.结束文档解析

    -(void)parserDidEndDocument:(NSXMLParser *)parser{

    NSLog(@"文档解析结束");

    for (Student *stu in self.array) {

    NSLog(@"%@",stu);

    }

    }

    }

    - (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

    }

    @end

    相关文章

      网友评论

          本文标题:SAX解析

          本文链接:https://www.haomeiwen.com/subject/thbodttx.html