IOS网络笔记--xml解析之一(sax解析)

来源:互联网 发布:linux关机触发脚本 编辑:程序博客网 时间:2024/06/06 12:43

申明:此为本人学习笔记,若有纰漏错误之处的可留言共同探讨


/*

 xml解析方式分为:

 1.系统提供的方式sax (本篇只讲sax解析)

 2.第三方控件解析方式dom


 sax解析步骤

 0 创建XMLParser类

 1 遵寻协议 <NSXMLParserDelegate>

 2 自定义解析方法 -(void)startparseWithData:(NSData*)data; 自定义方法初始化XML解析器,指定委托,解析

 3 遵循5个协议方法:

     开始解析文档,初始化一个字符串用于存储值

     开始找元素,解析元素

     找到字符,存进字符串中   [_string appendString:string];

     结束找元素, 可以输出解析内容,看看是否出错

 4 文档解析结束

 5 创建类,调用方法解析xml

 */


附上demo和素材:http://yunpan.cn/cFKajrYJWkM22 (提取码:eea7) (ps 素材是demo中的example.xml)



 XMLParser类

#import <Foundation/Foundation.h>

@interface XMLParser : NSObject<NSXMLParserDelegate>

{

    NSMutableString *_string;

}

-(void)startparseWithData:(NSData*)data;

@end

#import "XMLParser.h"

@implementation XMLParser

-(void)startparseWithData:(NSData*)data

{

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

    parser.delegate =self;

    [parser parse];

}

// 五个协议方法


- (void)parserDidStartDocument:(NSXMLParser *)parser

{

    _string  = [[NSMutableString alloc]init];

}


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

{

    [_string setString:@""];

    if ([elementName isEqualToString:@"a1"])

    {

        // 如果是标签里面的 用attributeDict  如果是标签外面直接拼接字符串 [_string appendString:string];

        NSString *key1 =[attributeDict objectForKey:@"key1"];

        NSLog(@"key1:%@",key1);

    }else if([elementName isEqualToString:@"name1"])

    {

        NSString *name1 = [attributeDict objectForKey:@"key1"];

        NSLog(@"name1:%@ ",name1);

    }

}


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

{

    [_string appendString:string];

}



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

{

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

        NSLog(@"找到:%@",_string);

    }

}


-(void)parserDidEndDocument:(NSXMLParser *)parser

{

}

@end


ViewController类


#import "ViewController.h"

#import "XMLParser.h"

@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // 找路径 把文件取出来,存进data内

    NSString *path = [[NSBundle mainBundle]pathForResource:@"example" ofType:@"xml"];

    NSData* data = [[NSData alloc]initWithContentsOfFile:path];


    // sax 创建解析器,解析xml

    XMLParser *xmlParser = [[XMLParser alloc]init];

    [xmlParser startparseWithData:data];

    

}





1 0
原创粉丝点击