iOS XML解析
来源:互联网 发布:下载刷赞软件 编辑:程序博客网 时间:2024/06/15 15:30
一、什么是xml
可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。通常用于,系统配置、网络数据传输、跨平台数据交互等。具有结构清晰、跨平台、功能强大等优点。
二、xml解析方式
a) SAX:事件驱动,逐行解析;优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:只需XML文档的少量内容,很少回头访问;机器内存少;
b) DOM:文档驱动,构建文档树;优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。
三、NSXMLParse
books.xml
<?xml version="1.0" encoding="utf-8"?><books> <book> <author>施耐庵</author> <name>水浒传</name> <price>99.9</price> </book> <book> <author>吴承恩</author> <name>西游记</name> <price>99.9</price> </book> <book> <author>曹雪芹</author> <name>红楼梦</name> <price>99.9</price> </book> <book> <author>罗贯中</author> <name>三国演义</name> <price>99.9</price> </book></books>
Book.h
//// Book.h// JSONDemo//// Created by LiLeo on 16/6/23.// Copyright © 2016年 LeoLi. All rights reserved.//#import <Foundation/Foundation.h>@interface Book : NSObject@property (nonatomic, copy) NSString * author;@property (nonatomic, copy) NSString * name;@property (nonatomic, strong) NSNumber * price;@end
XMLParseUtil.h
//// XMLParseUtil.h// JSONDemo//// Created by LiLeo on 16/6/23.// Copyright © 2016年 LeoLi. All rights reserved.//#import <Foundation/Foundation.h>@interface XMLParseUtil : NSObject <NSXMLParserDelegate>- (void)startParse;- (NSArray *)getBooks;@end
XMLParseUtil.m
//// XMLParseUtil.m// JSONDemo//// Created by LiLeo on 16/6/23.// Copyright © 2016年 LeoLi. All rights reserved.//#import "XMLParseUtil.h"#import "Book.h"@interface XMLParseUtil ()@property (nonatomic, strong) NSMutableArray * array;//存储多本书@property (nonatomic, strong) Book * book;//每一本书@property (nonatomic, copy) NSString * currentElement;//当前属性@property (nonatomic, strong) NSXMLParser * parser;//解析器@end@implementation XMLParseUtil/** * 懒加载 */- (NSMutableArray *)array { if(_array == nil) { _array = [NSMutableArray array]; } return _array;}/** * 懒加载 */- (NSXMLParser *)parser { if(_parser == nil) { NSBundle * bundle = [NSBundle mainBundle]; NSString * path = [bundle pathForResource:@"books" ofType:@"xml"]; NSData * data = [NSData dataWithContentsOfFile:path]; _parser = [[NSXMLParser alloc] initWithData:data]; _parser.delegate = self; } return _parser;}//开始文档- (void)parserDidStartDocument:(NSXMLParser *)parser { NSLog(@"document start");}//文档结束- (void)parserDidEndDocument:(NSXMLParser *)parser { NSLog(@"document end"); NSLog(@"%@", _book.author);}//开始元素- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict { _currentElement = elementName; if([elementName isEqualToString:@"book"]) { _book = [[Book alloc] init]; }}//结束元素- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName { if([elementName isEqualToString:@"book"]) { [self.array addObject:_book]; } _currentElement = nil;<span style="color:#ff0000;">//必须加上这句话,最终才会有数据 暂时不知道什么原因 有大牛知道的请指点一二,万分感谢</span>}//根据元素标签填补内容- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { NSLog(@"%@", string); if([_currentElement isEqualToString:@"author"]) { _book.author = string; }else if([_currentElement isEqualToString:@"name"]) { _book.name = string; }else if([_currentElement isEqualToString:@"price"]) { _book.price = [NSNumber numberWithFloat:[string floatValue]]; }}//解析接口- (void)startParse { [self.parser parse];}- (NSArray *) getBooks { return _array;}@end
JSONXMLParser解析xml文档采用的是事件驱动机制,解析速度快,占用内存少,但只能读,且数据不可逆。
四、GDataXML
GDataXML是谷歌提供的开源xml解析框架,是基于DOM文档对象模型方式的解析。
五、参考
a) http://my.oschina.net/khakiloveyty/blog/396671
b) http://blog.163.com/l1_jun/blog/static/143863882013102643156524/
c) http://www.jianshu.com/p/a54d367adb2a
0 0
- IOS开发解析XML
- ios xml解析
- iOS XML解析器
- ios XML解析
- iOS中XML解析
- iOS解析xml
- [iOS] XML解析
- iOS开发解析XML
- iOS XML解析器
- ios xml解析
- ios xml解析
- ios----xml解析
- IOS解析XML文件
- IOS开发 解析XML
- iOS XML解析
- IOS 解析XML
- ios xml解析
- IOS 解析XML
- storm学习笔记
- 将form中的值转换为键值对函数,Json.parse和json.stringify()用法
- 关于上架AppStore最后一步的“出口合规信息”、“内容版权”、“广告标识符”的选择
- eclipse中后缀为.vm的静态文件设置js智能提示
- Nginx安装与使用
- iOS XML解析
- innodb lru list、free list、flush list
- MVP模式在项目中的使用
- 为RecyclerView打造通用Adapter 让RecyclerView更加好用
- Linux新增磁盘、分区、格式化和自动挂载
- This application is modifying the autolayout engine from a background thread, which can lead to engi
- 浅谈getaddrinfo函数的超时处理机制
- 郁闷的出纳员(splay)
- EF 批插入