XML数据结构解析

1.  首先介绍一下XML数据结构:

XML:Extensible Markup language(可扩展标记语言),主流数据格式之一,可以用来标记数据,定义数据类型。

特点:一对尖括号代表一个节点,或者标签;只有一个根节点;节点可以互相嵌套;没有子节点的节点称为叶子节点

例如:Student.xml

<root>
    <stu_list>
        <stu_array name="A">
            <student>
                <name>李四</name>
                <age>22</age>
                <tel>555555555</tel>
            </student>
        </stu_array>
        
        <stu_array name="B">
            <student>
                <name>张三</name>
                <age>20</age>
                <tel>1111111111</tel>
            </student>
        </stu_array>
    </stu_list>
</root>

2.  解析:从事先规定好的格式中提取数据。

3.  XML解析时使用的工具之一: SAX

     (1). SAX:Simple API for XML,基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)

     (2). 解析类:NSXMLParser是iOS自带的XML解析类。

     (3). 解析过程:由NSXMLParserDelegate协议方法回调,开始标签 -->取值 -->结束标签 -->取值

4. 示例代码:(解析Student.xml文件)

- (void)startParser
{
    //获取需要解析的XML文件路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
    //转换为二进制
    NSData *data = [NSData dataWithContentsOfFile:path];
    NSXMLParser *par = [[NSXMLParser alloc] initWithData:data];
    //设置代理
    par.delegate = self;
    //开始解析
    [par parse];
    [par release];
}

//开始标签-->取值
//参数描述:
//(NSXMLParser *)parser:当前解析的XML文件;(NSString *)elementName:当前标签名称;(NSDictionary *)attributeDict:当前标签属性
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    //判断如果elementName == stu_array,那么创建字典将其放进去
    if ([elementName isEqualToString:stu_array]) {
        //数组->字典->数组格式
        NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
        [dic addEntriesFromDictionary:attributeDict];
        NSMutableArray *stus = [[NSMutableArray alloc] init];
        [dic setObject:stus forKey:@"array"];
        [_stuArray addObject:dic];
    }
    if ([elementName isEqualToString:student]) {
        StuModel *model = [[StuModel alloc] init];
        NSMutableDictionary *lastDic = [_stuArray lastObject];
        NSMutableArray *lastArr = [lastDic objectForKey:@"array"];
        [lastArr addObject:model];
        [model release];
    }
}
//结束标签-->取值
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    //判断内容是谁的,然后将其赋值给对应model的属性
    if ([elementName isEqualToString:name]) {
        NSMutableDictionary *dic = [_stuArray lastObject];
        NSMutableArray *arr = [dic objectForKey:@"array"];
        StuModel *model = [arr lastObject];
        model.name = _currentValue;
    }
    if ([elementName isEqualToString:age]) {
        NSMutableDictionary *dic = [_stuArray lastObject];
        NSMutableArray *arr = [dic objectForKey:@"array"];
        StuModel *model = [arr lastObject];
        model.age = _currentValue;
    }
    if ([elementName isEqualToString:tel]) {
        NSMutableDictionary *dic = [_stuArray lastObject];
        NSMutableArray *arr = [dic objectForKey:@"array"];
        StuModel *model = [arr lastObject];
        model.tel = _currentValue;
    }
    //当标签走到</root>时结束,并且保存数组
    if ([elementName isEqualToString:root]) {
        [self.delegate sendArray:_stuArray];
    }
}
//取值:获取标签中的内容
//参数描述:(NSString *)string:当前标签的内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    //获取内容并保存
    self.currentValue = string;
}








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值