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----");
}