http-//blog.sina.com.cn/s/blog_6ae8b50d0101apja.html
數(shù)據(jù)解析:從事先規(guī)定好的格式中提取數(shù)據(jù)
//NSJSONSerialization?解析JSON數(shù)據(jù)
?//+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;解析JSON數(shù)據(jù)的方法
?#pragma mark ****JSON數(shù)據(jù)解析****
?一糊秆、JSON解析
?1葫辐、概念:Javaacript object Notation?輕量級的數(shù)據(jù)交換格式铆惑,采用完全獨(dú)立于語言的文本格式格带,被稱為理想的數(shù)據(jù)交換語言聚请,易與人閱讀和便攜坛猪,同時相同數(shù)據(jù)用JSON編輯所占的內(nèi)存更小
?2谐宙、結(jié)構(gòu)
?(1)對象掰邢、字典
?以‘{’開始以‘}’結(jié)束毒费,名稱和值之間用‘:’隔開丙唧。多個‘名稱/值’對之間用‘,’隔開。
?例如: {"name":"Jay","age":22}
?(2)數(shù)組
?以‘[’開始以‘]’結(jié)束,中間是數(shù)據(jù),數(shù)據(jù)用‘,’隔開觅玻。
?例如: ["Jay","二狗"]
?"字符串"--NSString類型;18--NSNumber類型;{}--NSDictionary;[]--NSArray
?3想际、實(shí)例
?4、解析方法
?(1)第三方框架:JSONKit溪厘、SBJSON胡本、TouchJSON
?(2)系統(tǒng)提供的解析方法:NSJSONSerialization
?#pragma mark ****XML數(shù)據(jù)解析****
?二、XML解析
?1畸悬、概念:可擴(kuò)展標(biāo)記語言
?2侧甫、XML數(shù)據(jù)結(jié)構(gòu)
?(1)
?<標(biāo)簽名> **開始標(biāo)簽
?...具體的值
? **結(jié)束標(biāo)簽? =字符串(相當(dāng)于字符串)
?(2)
?<標(biāo)簽名>
? ? <標(biāo)簽名1>888
? ? <標(biāo)簽名1>666
? =數(shù)組
?(3)
?<標(biāo)簽名>
<不同的標(biāo)簽名1>XXX
<不同的標(biāo)簽名2>KKK
? =?字典
?3、XML數(shù)據(jù)解析
?GDataXMLNode:用來解析XML文件
? (1)GDataXMLDocument?讀取文檔
? (2)GDataXMLElement?讀取文檔里面的元素 可以通過具體的方法轉(zhuǎn)換成OC需要的數(shù)據(jù)·1
?**使用GDataXMLNode
?1蹋宦、需要導(dǎo)入libxml2
?2披粟、需要在bulid setting -> header search paths ->添加/usr/include/libxml2
#pragma mark?---練習(xí)實(shí)戰(zhàn)---
NSString?*path = [[NSBundle mainBundle]pathForResource:@"name.txt"?ofType:nil];
?//NSData?可以存儲任意類型的數(shù)據(jù)
?NSData?*data = [NSData dataWithContentsOfFile:path];
?//NSJSONSerialization?解析JSON數(shù)據(jù)
?//+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;解析JSON數(shù)據(jù)的方法
#pragma mark ****JSON數(shù)據(jù)解析****
?//JSONObjectWithData這個方法返回值是ID類型 可以使用JSON數(shù)據(jù)中最外層的數(shù)據(jù)類型去接收
?NSArray?*list = [NSJSONSerialization JSONObjectWithData:data?options:NSJSONReadingMutableContainers error:nil];
?NSArray?*modelArray = [UserModel arrayOfModelsFromDictionaries:list?error:nil];
?UserModel?*model = modelArray[0];
?NSLog(@"%@",model.address);
#pragma mark ****XML數(shù)據(jù)解析****
?//1、讀取文件路徑冷冗、內(nèi)容
?NSString?*xmlpath = [[NSBundle mainBundle]pathForResource:@"github.xml"ofType:nil];
?NSString?*content = [NSString stringWithContentsOfFile:xmlpath?encoding:NSUTF8StringEncoding error:nil];
?NSLog(@"%@",content);
?//2守屉、通過GDataXMLDocument讀取XML文件
?GDataXMLDocument?*booksDocument = [[GDataXMLDocumentalloc]initWithXMLString:content?encoding:NSUTF8StringEncoding?error:nil];
?//取出XML里面最外層的元素
?//booksDocument.rootElement
?//讀取GDataXMLElement對應(yīng)的OC數(shù)據(jù)類型
?//- (NSArray *)elementsForName:(NSString *)name;?返回值是一個數(shù)組
?NSArray?*elements = [booksDocument.rootElement elementsForName:@"book"];
//? ? NSLog(@"%@",elements);//GDataXMLElement類型
?GDataXMLElement?*element = elements[0];
?NSArray?*nameElementList = [element?elementsForName:@"name"];
?NSString?*name = [nameElementList.firstObject stringValue];
?NSLog(@"%@",name);
?//info?具體書的內(nèi)容(名字 價格)
?NSMutableDictionary?*info = [NSMutableDictionary dictionary];
?//resultList解析完成之后的數(shù)組 存的字典
?NSMutableArray?*resultList = [NSMutableArray array];
?for?(GDataXMLElement?*element?inelements) {
?NSString?*name = [[element?elementsForName:@"name"].firstObject stringValue];
?NSString?*price = [[element?elementsForName:@"price"].firstObject stringValue];
[info?setObject:name?forKey:@"name"];
[info?setObject:price?forKey:@"price"];
[resultList?addObject:info];
? ? }