iOS核心筆記——網路編程-XML

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.