首页 > 代码库 > iOS核心笔记——网络编程-XML

iOS核心笔记——网络编程-XML

1、XML简介:

?了解:XML的全称是Extensible Markup Language,翻译为“可扩展标记语言”;与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、GDataXML

5-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