网络:XML 解析

来源:互联网 发布:淘宝c店代运营 编辑:程序博客网 时间:2024/06/03 13:17
#import "ViewController.h"#import "CZVideo.h"@interface ViewController ()<NSXMLParserDelegate>@property (nonatomic, strong) NSMutableArray *videos;@property (nonatomic, strong) CZVideo *currentVideo; // 当前解析的模型@property (nonatomic, strong) NSMutableString *elementString;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {    // NSURL    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) {        NSXMLParser *xml = [[NSXMLParser alloc]initWithData:data];        // 设置代理        xml.delegate = self;        [xml parse];//        NSLog(@"response = %@ data = %@",response,data);//        NSLog(@"%@",xml);    }];}// 到现在还没有一个好用的第三方// 做即时通讯 xmpp (xml)#pragma mark - xml 解析代理- (void)parserDidStartDocument:(NSXMLParser *)parser {    NSLog(@"1. 开始文档");    // 创建一个可变数组    self.videos = [NSMutableArray array];}// 2,3,4 是循环- (void)parser:(NSXMLParser *)parser didStartElement:(nonnull NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(nonnull NSDictionary<NSString *,NSString *> *)attributeDict{    NSLog(@"2.发现节点%@",elementName);    NSLog(@"节点属性%@",attributeDict);    // 如果是video 创建模型, 并且做成属性保存起来(current)    if ([elementName isEqualToString:@"video"]) {      self.currentVideo = [[CZVideo alloc]init];    }    // 初始化拼接字符串(没有使用懒加载)//    self.elementString = [NSMutableString string];    // 使用懒加载(清掉string)    [self.elementString setString:@""];}// 3. 可能调用多次- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {    NSLog(@"3. 发现节点内容 = %@",string);    // 拼接节点内容(可变字符串)    [self.elementString appendString:string];}- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {    NSLog(@"4. 结束节点 %@",elementName);    // 其他的就设置模型的属性值//    if ([elementName isEqualToString:@"name"]) {//        self.currentVideo.name = self.elementString;//    }else if ([elementName isEqualToString:@"length"]) {//        self.currentVideo.length = self.elementString;//    }else if ([elementName isEqualToString:@"videoURL"]) {//        self.currentVideo.videoURL = self.elementString;//    }else if ([elementName isEqualToString:@"imageURL"]) {//        self.currentVideo.imageURL = self.elementString;//    }else if ([elementName isEqualToString:@"desc"]) {//        self.currentVideo.desc = self.elementString;//    }else if ([elementName isEqualToString:@"teacher"]) {//        self.currentVideo.teacher = self.elementString;//    }    if ([elementName isEqualToString:@"video"]) {        // 如果是video 把模型保存到数组        [self.videos addObject:self.currentVideo];    }else if (![elementName isEqualToString:@"videos"]) {        // kvc 设值        [self.currentVideo setValue:self.elementString forKey:elementName];    }    // 妙果是videos 不需要做任务操作}- (void)parserDidEndDocument:(NSXMLParser *)parser {    NSLog(@"5. 结束文档");    NSLog(@"%@",self.videos);}- (NSMutableString *)elementString {    if (_elementString == nil) {        _elementString = [NSMutableString string];    }    return _elementString;}@end
#import <Foundation/Foundation.h>@interface CZVideo : NSObject@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
0 0