#import "ViewController.h"
#import "CZVideo.h"
#import "CZParseVideoXml.h"
@interface ViewController ()<NSXMLParserDelegate>
@property (nonatomic, strong) NSArray *data;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSURL *url = [NSURL URLWithString:@"http://localhost/videos.xml"];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:15];
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
self.data = [CZParseVideoXml parseWithData:data];
NSLog(@"%@",self.data);
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"刷新UI%@",[NSThread currentThread]);
});
}];
}
@end
#import <Foundation/Foundation.h>
@interface CZVideo : NSObject
@property (nonatomic, copy) NSString *videoId;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *length;
@property (nonatomic, copy) NSString *videoURL;
@property (nonatomic, copy) NSString *imageURL;
@property (nonatomic, copy) NSString *desc;
@property (nonatomic, copy) NSString *teacher;
@end
#import "CZVideo.h"
@implementation CZVideo
@end
#import <Foundation/Foundation.h>
@interface CZParseVideoXml : NSObject
+ (NSArray *)parseWithData:(NSData *)data;
@end
#import "CZParseVideoXml.h"
#import "CZVideo.h"
@interface CZParseVideoXml ()<NSXMLParserDelegate>
@property (nonatomic, strong) NSMutableArray *videos;
@property (nonatomic, strong) CZVideo *currentVideo;
@property (nonatomic, strong) NSMutableString *elementString;
@property (nonatomic, copy) void(^finished)(NSArray *);
@end
@implementation CZParseVideoXml
+ (NSArray *)parseWithData:(NSData *)data{
NSXMLParser *xml = [[NSXMLParser alloc]initWithData:data];
CZParseVideoXml *parse = [[CZParseVideoXml alloc]init];
xml.delegate = parse;
[xml parse];
return parse.videos.copy;
}
#pragma mark - xml 解析代理
- (void)parserDidStartDocument:(NSXMLParser *)parser {
self.videos = [NSMutableArray array];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(nonnull NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(nonnull NSDictionary<NSString *,NSString *> *)attributeDict {
if ([elementName isEqualToString:@"video"]) {
self.currentVideo = [[CZVideo alloc]init];
self.currentVideo.videoId = attributeDict[@"videoId"];
}
[self.elementString setString:@""];
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
[self.elementString appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"video"]) {
[self.videos addObject:self.currentVideo];
}else if (![elementName isEqualToString:@"videos"]) {
[self.currentVideo setValue:self.elementString forKey:elementName];
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
if (self.finished) {
self.finished (self.videos.copy);
}
}
- (NSMutableString *)elementString {
if (_elementString == nil) {
_elementString = [NSMutableString string];
}
return _elementString;
}
@end