iOS之路16-XML解析

  1. 了解 解析XML的方法, 是5个代理方法
    服务器

            1) 开始解析文档异步

            2) 找开始节点ide

            3) 找节点之间的内容url

            4) 找结束节点spa

            5) 结束解析文档线程

    2.   设置代理, 遵照协议, 实现代理方法
代理

    3.   开始执行代理的方法,代理的方法中开始解析的code

            [parser parse];xml

#import "ViewController.h"
@interface ViewController () <NSXMLParserDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    [self loadXML];
}
//异步请求xml
- (void)loadXML {
    //异步请求服务器的xml文件
    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/videos.xml"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue new] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        if (connectionError) {
            NSLog(@"链接错误 %@",connectionError);
            return;
        }
        //
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
        if (httpResponse.statusCode == 200 || httpResponse.statusCode == 304) {
            //解析数据
            NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
            //设置代理
            parser.delegate = self;
            //开始执行代理的方法,代理的方法中开始解析的
            [parser parse];
        }else{
            NSLog(@"服务器内部错误");
        }
    }];
}
//代理方法执行  和 设置代理属性在同一个线程
//代理的方法
//1 开始解析文档
- (void)parserDidStartDocument:(NSXMLParser *)parser {
    NSLog(@"1 开始解析文档  %@",[NSThread currentThread]);
}
//2 找开始节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict {
    //elementName 节点的名称
    //attributeDict  标签的属性
    NSLog(@"2 找开始节点  %@--%@",elementName,attributeDict);
}
//3 找节点之间的内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    //
    NSLog(@"3 找节点之间的内容 %@",string);
}
//4 找结束节点
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    //elementName 节点名称
    NSLog(@"4 找结束节点 %@",elementName);
}
//5 结束解析文档
- (void)parserDidEndDocument:(NSXMLParser *)parser {
    NSLog(@"5 结束解析文档");
}
//6 解析出错
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
    NSLog(@"出错");
}
@end
相关文章
相关标签/搜索