SAX for XML
来源:互联网 发布:软件流程图绘制工具 编辑:程序博客网 时间:2024/06/18 11:06
#import "ViewController.h"#import "VideoModel.h"@interface ViewController () <NSXMLParserDelegate>@end@implementation ViewController { /// 模型数组 NSMutableArray *_videoM; /// 拼接节点之间的内容 NSMutableString *_stringM; /// 定义全局的模型 VideoModel *_currentModel;}- (void)viewDidLoad { [super viewDidLoad]; /// 实例化模型数组 _videoM = [NSMutableArray array]; _stringM = [NSMutableString string]; [self loadData];}- (void)loadData{ // 1.URL NSURL *URL = [NSURL URLWithString:@"http://localhost/videos.xml"]; // 2.session发起和启动任务 [[[NSURLSession sharedSession] dataTaskWithURL:URL completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { // 3.处理了响应 if (error == nil && data != nil) { // 反序列化 : SAX方式解析XML // 1.创建XML解析器 NSXMLParser *XMLParser = [[NSXMLParser alloc] initWithData:data]; NSXMLParser *xmlparser = [[NSXMLParser alloc]initWithData:data]; // 2.遵守XML解析器 XMLParser.delegate = self; // 3.开启解析器 [XMLParser parse]; } else { NSLog(@"%@",error); } }] resume];}#pragma mark - NSXMLParserDelegate// 1.开始解析XML文档- (void)parserDidStartDocument:(NSXMLParser *)parser{ NSLog(@"1.开始解析XML文档");}/// 提示 : 代理方法的2-3-4一直在循环的解析XML!!!!!// 2.找开始节点- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict{ // elementName : 开始节点名称 // attributeDict : 节点的属性// NSLog(@"2.找开始节点 = %@ - %@",elementName,attributeDict); // 只有找到<video>标签时,才创建`对应`的模型对象 if ([elementName isEqualToString:@"video"]) { // 创建<video>标签`对应`的模型对象 _currentModel = [[VideoModel alloc] init]; // 给模型的videoId属性赋值 : 因为只有在这里可以拿到videoId _currentModel.videoId = attributeDict[@"videoId"]; // 把创建的模型对象添加到模型数组videoM [_videoM addObject:_currentModel]; }}// 3.找节点之间内容 : 并非一次都能够找全的,完整的节点之间的内容需要拼接- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ // string : 节点之间的内容// NSLog(@"3.找节点之间内容 = %@",string); // 循环拼接节点之间的内容 : 给模型的属性赋值完之后,一定要清空一次 [_stringM appendString:string];}// 4.找结束节点 : 能够找到结束节点,说明节点之间的内容已经肯定找全了- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName{ // elementName : 结束节点名称// NSLog(@"4.找结束节点 = %@",elementName); // 每次找到一个结束节点,就给模型的属性付一次值;但是,<videos>和<video>标签不能赋值 if ([elementName isEqualToString:@"videos"] || [elementName isEqualToString:@"video"]) { return; } // 排除了不能给模型赋值的节点之后,剩下的都是可以正常给模型属性赋值的节点 [_currentModel setValue:_stringM forKey:elementName]; // 清空拼接字符串的容器 [_stringM setString:@""]; // 这样写相当于把不可变的字符串,赋值给可变的字符串// _stringM = @""; // 这样写相当于把_stringM销毁了// _stringM = nil;}// 5.结束解析XML文档- (void)parserDidEndDocument:(NSXMLParser *)parser{ NSLog(@"5.结束解析XML文档"); NSLog(@"%@",_videoM);}// 6.监听解析是否出错- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{ NSLog(@"6.监听解析是否出错 = %@",parseError);}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
0 0
- SAX for XML
- SAX:Simple API for XML
- SAX--Simple API for XML
- DOM & SAX for XML files
- SAX: Simple API for XML
- SAX 2.0 - Simple API for XML
- XML+ code for DOM and SAX
- SAX解析(Simple API For XML)
- Android XML解析(Simple API for XML(SAX) )
- sax xml
- xml sax
- dom和sax(simple api for xml) 概念
- Study SAX《SAX解析XML》
- xml sax 遍历xml
- [XML] SAX解析XML
- 【XML】SAX解析XML
- android解析xml文件的SAX方式:Simple API for XML
- Android开发小知识-XML文件解析之SAX(Simple API for XML)
- MySQl各种整型的区别
- 04:运算符、分支语句if-else和switch-case
- java从一个目录拷贝文件到另一个目录下
- wordpress中google的js公共库替换加速(不用360)
- Metal API随着iOS 10与macOS 10.12新引入的Tessellation特性
- SAX for XML
- Theano学习笔记(六)——载入与保存、条件
- CSDN-markdown编辑器教程
- 71. Simplify Path(stack)
- 用html+css+js实现中国象棋小游戏开发项目
- codeforces 148D. Bag of mice
- 部署方式
- Eclipse 安装插件后不显示的解决办法
- uboot的makefile是如何查找到相关头文件的?