iOS:XML文件的解析(SAX解析)
来源:互联网 发布:惠普spectre 13知乎 编辑:程序博客网 时间:2024/05/16 08:31
XML解析分为DOM解析和SAX解析,DOM解析非常的耗费性能,所以移动设备一般用SAX解析.它是从上向下解析的.
下面是我们要解析的XML文件样式.
先创建一个模型,名字就叫MCVideo,我们的最终目的就是将XML文件解析成模型数组.
#import <Foundation/Foundation.h>@interface MCVideo : NSObject@property(nonatomic,copy)NSString *videoId;@property(nonatomic,copy)NSString *name;@property(nonatomic,copy)NSString *length;@property(nonatomic,copy)NSString *videoURL;@property(nonatomic,copy)NSString *imageURL;@property(nonatomic,copy)NSString *desc;@property(nonatomic,copy)NSString *teacher;@end
#import "MCVideo.h"@implementation MCVideo- (NSString *)description{ return [NSString stringWithFormat:@"videoID:%@--name:%@--length:%@--videoURL:%@--imageURL%@--desc:%@--teacher:%@",_videoId,_name,_length,_videoURL,_imageURL,_desc,_teacher];}@end进行网络请求,根据返回的数据创建XMLParser对象.在XMLParser的代理方法中进行解析.
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/videos.xml"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { if (connectionError == nil && data != nil && data.length > 0) { //根据data创建一个XMLParser解析器 NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data]; parser.delegate = self; //开始解析 [parser parse]; } }];定义三个属性.一个可变数组,用来存储模型.一个模型,将XML文件转成模型需要用到.一个可变字符串,用来拼接(因为XML文件在解析的时候可能将一句话解析成好几句,所以需要用可变字符串将他们拼接起来,比如
<name>01.C语言-语法预览</name>,中间的一句可能解析成01. C语言 -语法预览三个部分)
//可变数组 用来存模型@property(nonatomic,strong)NSMutableArray *videoArr;//可变字符串 用来拼接@property(nonatomic,strong)NSMutableString *strM;//模型@property(nonatomic,strong)MCVideo *video;
在XMLParser代理方法中自顶向下开始解析.
在刚开始解析的时候创建一个可变数组,用来存储模型.解析到<videos>的时候什么也不做.
解析到<video>的时候创建模型对象,并且给模型的videoId的赋值.
在解析<name><length><videoURL>等标签之前清空可变字符串,防止把不同的内容拼接到一块.
解析两个标签之间的内容,解析的时候可能会将他们拆分成多个字符,使用可变字符串将他们拼接起来.
在解析到</name></length></videoURL>的时候给模型的name,length,videoURL等赋值
在解析到</video>的时候将模型添加到一开始创建的可变数组中
解析到</videos>的时候解析就全部完成了,最终是得到一个模型数组.
//XMLParser代理方法//开始解析- (void)parserDidStartDocument:(NSXMLParser *)parser{ self.videoArr = [NSMutableArray array];}//解析标签- (void)parser:(NSXMLParser *)parser didStartElement:(nonnull NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(nonnull NSDictionary<NSString *,NSString *> *)attributeDict{ //清空字符串 [self.strM setString:@""]; if ([elementName isEqualToString:@"videos"]) { }else if ([elementName isEqualToString:@"video"]){ self.video = [[MCVideo alloc]init]; self.video.videoId = attributeDict[@"videoId"]; }}//解析元素- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ [self.strM appendString:string];}//结束解析标签- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ if ([elementName isEqualToString:@"videos"]) { }else if ([elementName isEqualToString:@"video"]){ [self.videoArr addObject:self.video]; }else{ [self.video setValue:self.strM forKey:elementName]; }}//结束解析- (void)parserDidEndDocument:(NSXMLParser *)parser{
//打印模型数组 NSLog(@"%@",self.videoArr);}打印结果:
0 0
- iOS:XML文件的解析(SAX解析)
- IOS XML的SAX解析
- xml文件的sax解析
- xml文件的sax解析
- ios随笔之SAX解析XML文件
- xml文件解析-SAX
- sax解析xml文件
- SAX解析xml文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析xml文件
- SAX解析xml文件
- XML文件解析 sax
- SAX解析xml文件
- SAX解析XML文件
- SAX解析XML文件
- tomcat版本和jsp版本servlet版本的关系
- C#中怎么查询dataset中的数据,取其一行数据的每列到textbox中
- Xcode8去除控制台多余打印
- MySQL之SQL语法实例大全:11-20
- 关于堆和栈
- iOS:XML文件的解析(SAX解析)
- 跟我一起学C++之name managling与extern “C”
- printf 应用注意和 mosquitto loop简单说明
- WEB容器小谈
- 同一台Windows机器中启动多个Memcached服务
- 441. Arranging Coins
- mpls vpn OSPF配置
- HDU 1521排列组合
- hiho一下 第122周 后缀数组三·重复旋律3