NSXMLParser(SAX解析)大文件解析
- (void)viewDidLoad
{
[
{
[super
viewDidLoad];
// 1.创建URL
NSURL *url =
HMUrl(@"video?type=XML");
// 2.创建请求
NSURLRequest *request = [NSURLRequest
requestWithURL:url];
// 3.发送请求
[NSURLConnection
sendAsynchronousRequest:request
queue:[NSOperationQueue
mainQueue]
completionHandler:^(NSURLResponse
*response,
NSData *data,
NSError *connectionError) {
if (connectionError || data ==
nil) {
[MBProgressHUD
showError:@"网络繁忙,请稍后再试!"];
return;
}
//
解析XML数据
// 1.创建XML解析器
-- SAX --
逐个元素往下解析
NSXMLParser *parser = [[NSXMLParser
alloc]
initWithData:data];
// 2.设置代理
parser.delegate
=
self;
// 3.开始解析(同步执行)
[parser
parse];
// 4.刷新表格
[self.tableView
reloadData];
}];
}
#pragma mark - NSXMLParser的代理方法
/**
*
解析到文档的开头时会调用
*/
- (void)parserDidStartDocument:(NSXMLParser
*)parser
{
// NSLog(@"parserDidStartDocument----");
}
/**
*
解析到一个元素的开始就会调用
*
*
@param
elementName
元素名称
*
@param
attributeDict
属性字典
*/
- (void)parser:(NSXMLParser
*)parser didStartElement:(NSString
*)elementName namespaceURI:(NSString
*)namespaceURI qualifiedName:(NSString
*)qName attributes:(NSDictionary
*)attributeDict
{
if ([@"videos"
isEqualToString:elementName])
return;
HMVideo *video = [HMVideo
videoWithDict:attributeDict];
[self.videos
addObject:video];
}
/**
*
解析到一个元素的结束就会调用
*
*
@param
elementName
元素名称
*/
- (void)parser:(NSXMLParser
*)parser didEndElement:(NSString
*)elementName namespaceURI:(NSString
*)namespaceURI qualifiedName:(NSString
*)qName
{
// NSLog(@"didEndElement----%@", elementName);
}
/**
*
解析到文档的结尾时会调用(解析结束)
*/
- (void)parserDidEndDocument:(NSXMLParser
*)parser
{
// NSLog(@"parserDidEndDocument----");
}