iOS核心笔记——网络编程-XML
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章