標籤:setup 技術 tar rate enumerate code 標記 環境配置 常式
1、XML簡介:
?瞭解:XML的全稱是Extensible Markup Language,翻譯為“可延伸標記語言 (XML)”;與JSON一樣,也是常用的一種用於互動的資料格式;一般也稱為XML文檔(XML Document)。
XML文檔樣本:
2、XML文法介紹:2-1、XML-文檔聲明:
2-2、XML-元素(Element):
2-3、XML-元素注意:
2-4、XML-屬性(Attribute):
3、XML解析方案:
?瞭解:XML有2種解析方式:①DOM:一次性將整個XML文檔載入進記憶體,比較適合解析小檔案;②SAX:從根項目開始,按順序一個元素一個元素往下解析,比較適合解析大檔案。
3-1、XML解析方案:
3-2、XML解析方式選擇:
4、NSXMLParser解析:
?瞭解:NSXMLParser是基於SAX方式解析XML。
4-1、NSXMLParser解析步驟:
步驟一:建立NSXMLParser解析器,一個NSXMLParser對象代表一個解析器;
1.// 6. 建立解析器
2.NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
步驟二:設定解析器的代理對象,代理對象遵守<NSXMLParserDelegate>協議、實現相應的解析方法;
1.// 7. 設定代理
2.parser.delegate = self;
步驟三:解析器調用parse方法開始解析。
1.// 8. 開始解析
2.[parser parse];
4-2、NSXMLParser代理方法:
4-3、樣本程式:
1.#pragma mark - NSXMLParserDelegate
2./**
3. 開始解析XML文檔, 只會調用一次
4. */
5.- (void)parserDidStartDocument:(NSXMLParser *)parser{
6. NSLog(@"%s", __func__);
7.}
8.
9./**
10. 開始解析XML元素, 當XML檔案中有多少個元素便會調用多少次
11. */
12.- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{
13. NSLog(@"%s", __func__);
14.
15. // 1. 替換屬性名稱
16. [HHMovie mj_setupReplacedKeyFromPropertyName:^NSDictionary *{
17. return @{@"id" : @"ID"};
18. }];
19.
20. // 2. 判斷是否為根項目, 因為根項目的內容為子項目; 所以, 無法轉換為模型
21. if ([elementName isEqualToString:@"videos"]) {
22. return ;
23. }
24.
25. // 3. 建立模型
26. HHMovie *movie = [HHMovie mj_objectWithKeyValues:attributeDict];
27.
28. // 4. 添加到模型數組
29. [self.movies addObject:movie];
30.}
31.
32./**
33. 解析完XML中的元素
34. */
35.- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
36. NSLog(@"%s", __func__);
37.}
38.
39./**
40. 解析完整個XML文檔, 最後一次調用
41. */
42.- (void)parserDidEndDocument:(NSXMLParser *)parser{
43. NSLog(@"%s", __func__);
44.
45. // 1. 主線程中重新整理表格
46. dispatch_async(dispatch_get_main_queue(), ^{
47. [self.tableView reloadData];
48. });
49.}
5、GDataXML5-1、解析環境配置:
5-2、GDataXML常用類:
5-3、樣本程式:
1. // MARK: - GDataXMLNode解析XML檔案
2. // 1. 建立XML文檔對象, 一個GDataXMLDocument對象就代表著一個XML文檔
3. GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
4.
5. // 2. 擷取根項目
6. GDataXMLElement *rootElement = [doc rootElement];
7.
8. // 3. 根據元素名擷取根項目中所有子項目
9. NSArray *elements = [rootElement elementsForName:@"video"];
10.
11. // 4. 遍曆
12. [elements enumerateObjectsUsingBlock:^(GDataXMLElement *element, NSUInteger idx, BOOL * _Nonnull stop) {
13. // 5. 建立模型
14. HHMovie *movie = [[HHMovie alloc] init];
15.
16. // 6. 根據元素中的屬性名稱擷取屬性值
17. movie.id = [element attributeForName:@"id"].stringValue.integerValue;
18. movie.image = [element attributeForName:@"image"].stringValue;
19. movie.length = [element attributeForName:@"length"].stringValue;
20. movie.url = [element attributeForName:@"url"].stringValue;
21. movie.name = [element attributeForName:@"name"].stringValue;
22.
23. // 7. 添加到模型數組
24. [self.movies addObject:movie];
25.
26. // 8. 重新整理表格
27. dispatch_async(dispatch_get_main_queue(), ^{
28. [self.tableView reloadData];
29. });
30. }];
iOS核心筆記——網路編程-XML