使用介绍:
使用步骤
// 传入XML数据,创建解析器
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 设置代理,监听解析过程
parser.delegate = self;
// 开始解析
[parser parse];
NSXMLParser采取的是SAX方式解析,特点是事件驱动,下面情况都会通知代理
当扫描到文档(Document)的开始与结束
当扫描到元素(Element)的开始与结束
代理方法NSXMLParserDelegate
当扫描到文档的开始时调用(开始解析)
- (void)parserDidStartDocument:(NSXMLParser *)parser
当扫描到文档的结束时调用(解析完毕)
- (void)parserDidEndDocument:(NSXMLParser *)parser
当扫描到元素的开始时调用(attributeDict存放着元素的属性)
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
当扫描到元素的结束时调用
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
代码示例
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//1.url
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/video?type=XML"];
//2.创建请求对象
NSURLRequest *request =[NSURLRequest requestWithURL:url];
//3.发送异步请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
if (connectionError) {
return ;
}
//4.解析数据
//4.1 创建XML解析器:SAX
NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
//4.2 设置代理
parser.delegate = self;
//4.3 开始解析,阻塞.解析XML文档并没有开子线程。
[parser parse];
//5.更新UI
[self.tableView reloadData];
}];
}
#pragma mark ----------------------
#pragma mark NSXMLParserDelegate
//1.开始解析XML文档的时候
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
NSLog(@"%s",__func__);
}
//2.开始解析某个元素
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
NSLog(@"开始解析%@---%@",elementName,attributeDict);
//过滤根元素
if ([elementName isEqualToString:@"videos"]) {
return;
}
// attributeDict中存放的是XML文档元素中的内容,以字典的形式
//字典转模型
// [self.videos addObject:[XMGVideo mj_objectWithKeyValues:attributeDict]];
}
//3.某个元素解析完毕
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSLog(@"结束解析%@",elementName);
}
//4.结束解析
-(void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"%s",__func__);
}
网友评论