iOS-XML/JSON解析
一、XML解析
XML解析有两种方式:
DOM:一次性将整个XML文档加载进内存,比较适合解析小文件;
SAX:从根元素开始,按顺序一个元素一个元素的向下解析,适合大文件;
二、XML解析框架
原生框架:NSXMLParser:SAX解析方式
第三方框架:libxml2:支持DOM和SAX方式
GDataXML:DOM方式解析,基于libxml2
大文件:NSXMLParser、libxml2
小文件:GDataXML、NSXMLParser、libxml2
三、解析
SAX解析:实现<NSXMLPaserDelegate>
1.解析数据(反序列化)
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
// 开始解析: parse方法是 阻塞的, 只有把解析完,才会 调用reloadData
[parser parse];
2.实现代理方法
// 开始解析
- (void)parserDidStartDocument:(NSXMLParser *)parser{ };
// 开始解析某个元素
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<nsstring nsstring=""> *)attributeDict{ }
// 某个元素解析完毕
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ }
// 结束解析
- (void)parserDidEndDocument:(NSXMLParser *)parser{ }
DOM解析:(GDataXMLDocument)
1.配置工作:
(1)导入GDataXML文件。
2.解析数据(反序列化)
2.1加载整个xml文档
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:kNilOptions error:nil];
2.2 XML文档的根元素. 拿到根元素内部的 所有名称为video的子孙元素
NSArray *eles = [doc.rootElement elementsForName:@"video"];
2.3 遍历操作子元素,拿到子元素中的属性
for(GDataXMLElement *ele in eles)
一、JSON解析
苹果原生:NSJSONSerialization
第三方库:SBJSON、JSONKit、MJExtension
序列化:OC对象-->JSON/XML
反序列化:JSON/XML-->OC对象
二、解析
原生:
JSON数据 —> OC对象
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
OC对象 —> JSON数据
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
OC对象是否可转
+ (BOOL)isValidJSONObject:(id)obj
JSONObjectWithData返回类型是id,可以用字典、数组接收,通过字典对应key访问数据
字典转JSON、JSON转字典、JSON转数组