申明:此为本人学习笔记,若有纰漏错误之处的可留言共同探讨
/*
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];
}