快速网站建设,营销型网站建设域名是,建设部网站江苏金安,广州公司摇号申请网站iOS中XML解析分为两种实现方式#xff1a;SAX与DOM SAX方式#xff1a;主要是事件驱动的解析方式#xff0c;是逐行读取XML数据#xff0c;不断回调代理#xff0c;告诉代理当前解析的元素开始或者结束。 DOM解析方式#xff1a;是讲整个XML数据全部读入内存#xff0…iOS中XML解析分为两种实现方式SAX与DOM SAX方式主要是事件驱动的解析方式是逐行读取XML数据不断回调代理告诉代理当前解析的元素开始或者结束。 DOM解析方式是讲整个XML数据全部读入内存然后形成一颗树形结构再根据元素的名称来读取相关的属性。 优缺点 1SAX解析适合大型文件解析对内存占用比较小但是解析是采用事件驱动方式因此代码比较零散复杂。 2DOM解析方式适合小型文件解析代码实现非常简单基本是按照元素名称来索引相关的属性。但是在解析大型文件的时候由于是将XML数据全部读入内存因此内存占用比较大。 1.下面首先介绍简单的DOM解析方式使用google开源的GDataXML开源框架。 // 解析XML数据 // 加载整个XML数据GDataXMLDocument *doc [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];// 获得文档的根元素 -- videos元素GDataXMLElement *root doc.rootElement;// 获得根元素里面的所有video元素NSArray *elements [root elementsForName:video];// 遍历所有的video元素for (GDataXMLElement *videoElement in elements) {HMVideo *video [[HMVideo alloc] init];// 取出元素的属性video.id [videoElement attributeForName:id].stringValue.intValue;video.length [videoElement attributeForName:length].stringValue.intValue;video.name [videoElement attributeForName:name].stringValue;video.image [videoElement attributeForName:image].stringValue;video.url [videoElement attributeForName:url].stringValue;// 添加到数组中[self.videos addObject:video];}2.使用SAX方式解析XML数据使用的是苹果自带的解析框架NSXMLParser框架 // 解析XML数据 // 1.创建XML解析器 -- SAX -- 逐个元素往下解析NSXMLParser *parser [[NSXMLParser alloc] initWithData:data];// 2.设置代理parser.delegate self;// 3.开始解析同步执行[parser parse];pragma mark - NSXMLParser的代理方法– /** * 解析到文档的开头时会调用 */ - (void)parserDidStartDocument:(NSXMLParser *)parser { // NSLog(”parserDidStartDocument—-“); }
/** * 解析到一个元素的开始就会调用 * * param elementName 元素名称 * param attributeDict 属性字典 */ - (void)parser:(NSXMLParser )parser didStartElement:(NSString )elementName namespaceURI:(NSString )namespaceURI qualifiedName:(NSString )qName attributes:(NSDictionary *)attributeDict { if ([”videos” isEqualToString:elementName]) return;
HMVideo *video [HMVideo videoWithDict:attributeDict];
[self.videos addObject:video];}
/** * 解析到一个元素的结束就会调用 * * param elementName 元素名称 */ - (void)parser:(NSXMLParser )parser didEndElement:(NSString )elementName namespaceURI:(NSString )namespaceURI qualifiedName:(NSString )qName { // NSLog(”didEndElement—-%”, elementName); }
/** * 解析到文档的结尾时会调用解析结束 */ - (void)parserDidEndDocument:(NSXMLParser *)parser { // NSLog(”parserDidEndDocument—-“); }