首页 > 代码库 > NSXMLParser解析简例

NSXMLParser解析简例

本篇以以下类型的XML为例解析:

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="e0">密码错误</string>

    <string name="e1">手机号不存在</string>

    <string name="e2">未找到该城市</string>

    <string name="e3">参数异常</string>

    <string name="e4">鱼种库为空</string>

    <string name="e6">文件为空</string>

    <string name="e7">参数异常或为空</string>

    <string name="e8">发布失败</string>

    <string name="e10">token异常,请重新登录</string>

    <string name="e11">钓点不存在</string>

    <string name="e12">钓点id未找到</string>

    <string name="e13">钓点id错误</string>

    <string name="e14">收藏失败</string>

    <string name="e15">已收藏</string>

    <string name="e16">经纬度参数错误</string>

    <string name="e18">城市不能为空</string>

    <string name="e17">无更多钓点</string>

    <string name="e19">插入失败</string>

    <string name="e20">手机号码或验证码不正确</string>

    <string name="e21">参数类型错误</string>

    <string name="e22">数据写入错误</string>

</resources>


-(void)parserXMLFile

{

    //打开xml,读取文件内容后关闭文件

    NSString * path  = [[NSBundle mainBundlepathForResource:@"error" ofType:@"xml"];

    NSFileHandle * file = [NSFileHandle fileHandleForReadingAtPath:path];

    NSData * data = http://www.mamicode.com/[file readDataToEndOfFile];

    [file closeFile];

    //初始化解析工具

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

    //设置代理

    [m_parser setDelegate:self];

    //开始解析,设置解析结果flag,解析结束后会执行

    BOOL flag = [m_parser parse];

    if (flag) {

        QLLog(@"解析成功");

    }else{

        QLLog(@"解析失败");

    }

}

//开始解析

-(void)parserDidStartDocument:(NSXMLParser *)parser

{

    dicXML = [[NSMutableDictionary alloc]initWithCapacity:10];

}

//遇到开始标记

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

{

    //QLLog(@"elementName:%@\n namespaceURI:%@\n qName:%@ \n attributeDic:%@",elementName,namespaceURI,qName,attributeDict);

    

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

        keyCode = [attributeDict objectForKey:@"name"]; //错误码

        QLLog(@"keyCode:%@",keyCode);

    }

}

//遇到结束标记

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

    //QLLog(@"end:  elementName:%@\n namespaceURI:%@\n qName:%@ \n",elementName,namespaceURI,qName);

}

//节点中有值时进入此方法

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

{

    QLLog(@"key:%@",keyCode);

    QLLog(@"value:%@",string);//错误说明

    string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""];

    string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];

    if(keyCode.length&&string.length){

        [dicXML setObject:string forKey:keyCode];

    }

}

//解析结束

-(void)parserDidEndDocument:(NSXMLParser *)parser

{

    QLLog(@"dicData:%@",dicXML);

}

NSXMLParser解析简例