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
相關文章
相關標籤/搜索