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 - NSXMLParserDelegate2./**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. }];
时间: 2024-10-13 02:43:22