XML解析有两种方式
1.系统自带的方法
NSXMLParser
使用
(1)用data初始化
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
(2)设置代理,要先遵守协议NSXMLParserDelegate
parser.delegate = self;
(3)开始解析
[parser parse];
实现代理的方法
//开始
- (void)parserDidStartDocument:(NSXMLParser *)parser
//结束
- (void)parserDidEndDocument:(NSXMLParser *)parser
//解析到一个元素的开头时调用,在这个方法里面拿到解析的属性,在赋值给模型
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
//解析到一个元素结束
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
//解析到的元素的值
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
如果嵌套的元素很多,解析起来很恶心
2.用第三方库
libxml2:C语言实现的,默认包含在iOS中
GDataXML:谷歌基于libxml2开发的
libxml2
纯C语言写的,http://xmlsoft.org/html/index.html
这个是文档要,使用之前需要设置
项目->TARGETS->Build Phases->Link Binary With Libraries 添加libxml2.tdb
然后Build Settings-> Header Search Paths下添加路径/usr/include/libxml2
使用的话还是看文档
GDataxml
基于libxml2(需要像上面一样先配置),的oc封装,非ARC环境。在使用的时候(其实就是arc和mrc混编的问题),把.h和.m文件拖到项目,然后到项目->TARGETS->Build Phases->Compile Sources 找到.m文件在后面加上-fno-objc-arc
,能编译成功就可以
使用
解析成文档
NSError *xmlerror = nil;
GDataXMLDocument *xmlDocument = [[GDataXMLDocument alloc]initWithData:data options:0 error:&xmlerror];
获取根元素并获取根元素
GDataXMLElement *rootElement = self.xmlDocument.rootElement;
获取元素属性
GDataXMLNode *rootAttribute=[rootElement attributeForName:@"count"]
获取属性的值
NSString *value=[rootAttribute stringValue];
获取子元素
NSArray *pointsArray = [rootElement elementsForName:@"subElement"]
XMLJSON解析也是两种方式
1.系统自带的方法
NSJSONSerialization 可以跳到头文件看
OC对象转JSON数据
+ (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
JSON数据转OC对象
+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
OC对象是否可转
+ (BOOL)isValidJSONObject:(id)obj;
2.第三方框架
JSONKit、SBJson、TouchJSON(感觉系统自带的最好用)
JSONKit
,需要要添加libz.tbd动态库
网友评论