IOS XML解析

xml文件中需要解析的数据节点单个样式
<AirlinesTime diffgr:id="AirlinesTime1" msdata:rowOrder="0">
        <Company>吉祥航空</Company>
        <AirlineCode>HO1252</AirlineCode>
        <StartDrome>北京首都国际机场</StartDrome>
        <ArriveDrome>上海虹桥国际机场</ArriveDrome>
        <StartTime>06:35</StartTime>
        <ArriveTime>09:00</ArriveTime>
        <Mode>320</Mode>
        <AirlineStop>0</AirlineStop>
        <Week>123456日</Week>
      </AirlinesTime>

1. 在.h文件中加入协议

NSXMLParserDelegate


2.在.h文件中定义3个属性,用于解析过程中的存值和保存所有解析完成的数据

@property (strong,nonatomic) NSMutableString *bodyStr;//解析出来的内容暂存字符串

@property (strong,nonatomic) NSMutableDictionary *currDic;//数据键值对

@property (strong,nonatomic) NSMutableArray *listPlaneCodes;//存放解析完对象的集合


3.在.m文件中,找地方初始化上面的3个属性

viewDidLoad中:

//初始化解析用到的变量

self.listPlaneCodes = [[NSMutableArray alloc] init];

self.bodyStr = [[NSMutableString alloc] init];

因为要记录每个节点的键值,currDic在解析过程中进行初始化。


4.初始化parser并开始进行解析

//解析数据

//利用需要解析的xml数据data进行初始化

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

//设置代理,以便使用其回调方法进行数据解析

[parser setDelegate:self];


5.解析过程在所添加协议的回调方法中进行

//节点开始

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

{

    //判断当前节点名,NSOrderedSame用以判断字符串是否相等

    if (NSOrderedSame == [elementName compare:@"AirlinesTime"]) {

        //初始化字典

        self.currDic = [[NSMutableDictionary alloc] init];

    }

}



//节点中间,节点开始标签和结束标签之间,处理内容

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

{

    //非空判断

    if (string != nil) {

        //去处特殊字符,空格和下划线之类

        NSString *trim = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

        //将读取到的内容存入准备好的字符串中

        [_bodyStr appendFormat:@"%@",trim];

    }

}


//节点结束

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

{

    //判断节点名

    if (NSOrderedSame == [elementName compare:@"Company"]) {

        //存入字典

        [_currDic setObject:[self.bodyStr copy] forKey:@"Company"];

    }

    

    else if (NSOrderedSame == [elementName compare:@"AirlineCode"]) {

        //存入字典

        [_currDic setObject:[self.bodyStr copy] forKey:@"AirlineCode"];

    }

    

    else if (NSOrderedSame == [elementName compare:@"StartDrome"]) {

        //存入字典

        [_currDic setObject:[self.bodyStr copy] forKey:@"StartDrome"];

    }

    

    else if (NSOrderedSame == [elementName compare:@"ArriveDrome"]) {

        //存入字典

        [_currDic setObject:[self.bodyStr copy] forKey:@"ArriveDrome"];

    }

    

    else if (NSOrderedSame == [elementName compare:@"Week"]) {

        //存入字典

        [_currDic setObject:[self.bodyStr copy] forKey:@"Week"];

    }

    //读取到数据结构结束节点

    else if (NSOrderedSame == [elementName compare:@"AirlinesTime"]) {

        //将准备好数据的字典,作为对象存放到准备好的集合中

        [_listPlaneCodes addObject:_currDic];

        _currDic = nil;

    }

    

    //清空存数据值的字符串,清除长度根据字符串自己的长度

    [_bodyStr deleteCharactersInRange:NSMakeRange(0,[_bodyStr length])];

}


6.解析结束

//如果解析完成,则返回true

    BOOL flag = [parser parse];

    if (flag) {

        //解析成功

    }else{

        //解析失败

        

    }









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值