IOS----UI,解析,xml

现有StudentModel如下:

#import <Foundation/Foundation.h>

@interface StudentModel : NSObject

@property(nonatomic,copy) NSString *name;
@property(nonatomic,copy) NSString *age;
@property(nonatomic,copy) NSString *tel;


- (instancetype)init;
@end

XML如下:

<root>
    <stu_list>
        <stu_array name="A">
            <student>
                <name>刘吉吉</name>
                <age>18</age>
                <tel>120</tel>
            </student>
            <student>
                <name>刘骚辉</name>
                <age>19</age>
                <tel>110</tel>
            </student>
        </stu_array>
        <stu_array name="B">
            <student>
                <name>龚公公</name>
                <age>20</age>
                <tel>119</tel>
            </student>
            <student>
                <name>蓝翔</name>
                <age>21</age>
                <tel>114</tel>
            </student>
        </stu_array>
    </stu_list>
</root>





创建解析类:

#import <Foundation/Foundation.h>

@protocol SaxXmlParserDelegate <NSObject>

@required
//协议传值
- (void)parserFinished:(NSArray *)array;

@end

@interface SaxXmlParser : NSObject<NSXMLParserDelegate>{
    NSMutableArray *_stuArray;
}

@property(nonatomic,assign) id<SaxXmlParserDelegate>delegate;
@property(nonatomic,copy) NSString *currentValue;

- (instancetype)init;

- (void)startParser;

@end

#import "SaxXmlParser.h"
#import "StudentModel.h"
@implementation SaxXmlParser

- (void)dealloc{
    [_stuArray release];
    _stuArray = nil;
    [_currentValue release];
    _currentValue = nil;
    [super dealloc];
}

- (instancetype)init{
    self = [super init];
    if(self){
        _stuArray = [[NSMutableArray alloc]init];
    }
    return self;
}


- (void)startParser{
   //获取xml文件路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
    //根据路径将文件转换成二进制对象
    NSData *data = [NSData dataWithContentsOfFile:path];
    //Xml解析器
    NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
    //设置代理人
    parser.delegate = self;
    //开始解析
    [parser parse];
}

static NSString *kRoot = @"root";
static NSString *kStuArray = @"stu_array";
static NSString *kStudent = @"student";
static NSString *kName = @"name";
static NSString *kAge = @"age";
static NSString *kTel = @"tel";


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName/*节点名*/ namespaceURI:(NSString *)namespaceURI/*属性*/ qualifiedName:(NSString *)qName/**/ attributes:(NSDictionary *)attributeDict/**/{
    if([elementName isEqualToString:kStuArray]){
        NSMutableDictionary *dic = [NSMutableDictionary dictionary];
        [dic addEntriesFromDictionary:attributeDict];//把attributeDict所有内容取出添加进dic
        NSMutableArray *array = [NSMutableArray array];
        [dic setObject:array forKey:@"array"];
        [_stuArray addObject:dic];
    }
    if([elementName isEqualToString:kStudent]){
        StudentModel *model = [[StudentModel alloc]init];
        
        //找到存储StudentModel的小数组
        NSMutableDictionary *lastDic = [_stuArray lastObject];
        NSMutableArray *lastArray = [lastDic objectForKey:@"array"];
        
        [lastArray addObject:model];
    }
}


- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    if([elementName isEqualToString:kName]){
        NSMutableDictionary *dic = [_stuArray lastObject];
        NSMutableArray *array = [dic objectForKey:@"array"];
        StudentModel *model = [array lastObject];
        model.name = _currentValue;
    }
    if([elementName isEqualToString:kAge]){
        NSMutableDictionary *dic = [_stuArray lastObject];
        NSMutableArray *array = [dic objectForKey:@"array"];
        StudentModel *model = [array lastObject];
        model.age = _currentValue;
    }
    if([elementName isEqualToString:kTel]){
        NSMutableDictionary *dic = [_stuArray lastObject];
        NSMutableArray *array = [dic objectForKey:@"array"];
        StudentModel *model = [array lastObject];
        model.tel = _currentValue;
    }
    if([elementName isEqualToString:kRoot]){
        //协议传值
        [self.delegate parserFinished:_stuArray];
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    self.currentValue = string;//属性的赋值必须用self.
}

//系统提供的所有参数都是自动释放的。
@end

解析的用法:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.translucent = NO;
    
    [self startSax];
    //[self domParser];
    
}

- (void)startSax{
    SaxXmlParser *parser = [[SaxXmlParser alloc]init];
    parser.delegate = self;
    [parser startParser];
    [parser release];
    NSLog(@"========%@",_tableArray);
}

//协议传值
- (void)parserFinished:(NSArray *)array{
    [_tableArray addObjectsFromArray:array];
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值