iOS-UI-XML数据解析-SAX方法

iOS-UI-XML数据解析-SAX方法iOS-UI-XML数据解析-SAX方法
iOS-UI-XML数据解析-SAX方法

iOS-UI-XML数据解析-SAX方法
iOS-UI-XML数据解析-SAX方法
iOS-UI-XML数据解析-SAX方法
//
// ViewController.m
// XML解析
//
// Created by YIem on 16/2/29.
// Copyright © 2016年 YIem. All rights reserved.
//

import "ViewController.h"

import "Student.h"

@interface ViewController ()<NSXMLParserDelegate>
@property (nonatomic, retain) NSMutableArray *stuArr;
@property (nonatomic, copy) NSString *elementNameStr;
@end

@implementation ViewController

  • (void)dealloc
    {

    [_stuArr release];
    [super dealloc];

    }

  • (void)viewDidLoad {

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor whiteColor];
    UIButton *saxB = [UIButton buttonWithType:UIButtonTypeSystem];
    saxB.frame = CGRectMake(100, 100, 80, 30);
    [saxB setTitle:@"XML解析" forState:UIControlStateNormal];
    [saxB addTarget:self action:@selector(saxAction) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:saxB];

    }

  • (void)saxAction
    {

    // 获取文件路径
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
    // 读取文件内容
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    // XML解析
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
    // 协议
    parser.delegate = self;
    // 开始解析
    [parser parse];

    }

// 方法

  • (void)parserDidStartDocument:(NSXMLParser *)parser
    {
    NSLog(@"开始解析");
    self.stuArr = [NSMutableArray array];
    }
  • (void)parser:(NSXMLParser )parser didStartElement:(NSString )elementName namespaceURI:(NSString )namespaceURI qualifiedName:(NSString )qName attributes:(NSDictionary<NSString ,NSString > *)attributeDict
    {
    NSLog(@"只解析开始标签:%@", elementName);
    // 为了在"解析值"的方法内获取到当前的意义(为解析标签值服务)
    self.elementNameStr = elementName;
    // 如开始标签为@"student", 代表是新的一名学生信息, 此时添加新的学生对象
    if ([elementName isEqualToString:@"student"]) {

    Student *stu = [[Student alloc] init];
    [self.stuArr addObject:stu];
    [stu release];

    }
    }

  • (void)parser:(NSXMLParser )parser foundCharacters:(NSString )string
    {
    NSLog(@"解析标签值:%@", string);
    // 为最新添加的学生对象设置值
    Student *stu = self.stuArr.lastObject;

    [stu setValue:string forKey:self.elementNameStr];
    }

  • (void)parser:(NSXMLParser )parser didEndElement:(NSString )elementName namespaceURI:(NSString )namespaceURI qualifiedName:(NSString )qName
    {
    NSLog(@"只解析结束标签:%@", elementName);
    // 数据解析为空(n)的第二种解决办法
    self.elementNameStr = nil;
    }
  • (void)parserDidEndDocument:(NSXMLParser *)parser
    {
    NSLog(@"结束解析");
    for (Student *stu in self.stuArr) {

    NSLog(@"%@ %@ %@ %@", stu.number, stu.name, stu.sex, stu.phone);

    }
    }

  • (void)parser:(NSXMLParser )parser parseErrorOccurred:(NSError )parseError
    {
    NSLog(@"不可恢复错误");
    }
  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

@end



//
// Student.h
// XML解析
//
// Created by YIem on 16/2/29.
// Copyright © 2016年 YIem. All rights reserved.
//

import <Foundation/Foundation.h>

@interface Student : NSObject
@property (nonatomic, copy) NSString *number;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *sex;
@property (nonatomic, copy) NSString *phone;
@end


//
// Student.m
// XML解析
//
// Created by YIem on 16/2/29.
// Copyright © 2016年 YIem. All rights reserved.
//

import "Student.h"

@implementation Student

  • (void)dealloc
    {

    [_number release];
    [_name release];
    [_sex release];
    [_phone release];
    [super dealloc];

    }

  • (void)setValue:(id)value forUndefinedKey:(NSString *)key
    {

    }

@end