XML
SAX解析
- 创建XML解析对象
1 2
| NSURL *url = [NSBundle mainBundle] URLForResource:@"bookstore" withExternsion:@"xml"]; NSXMLParser *parser = [][NSXMLParser alloc]initWithContentsOfURL:url];
|
- 设置XMLParser 对象的delegate
- 调用delegate的fangf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| - (void)parserDidStartDocument:(NSXMLParser *)parser { //当时开始解析的时候条用该方法,通常在这个方法里, 创建模型数组 } - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { //当开始解析,遇到元素的开始标签时,回调用这个方法,通常在这个方法里,创建模型对象,或解析标签中得属性并保存在模型对象中 } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { //当解析到xml标签的文本内容时,回调用这个方法,通常在这个方法里,暂存解析到的文本内容 } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { //当解析xml内容遇到结束标签时,回调用这个方法,通常在这个方法里,需要将模型对象保存到数组中或把标签对应的文本内容解析出来,保存在模型对象中。(通过KVC赋值) } - (void)parserDidEndDocument:(NSXMLParser *)parser { //当整个xml解析完成条用这个方法,可以完成其他操作 }
|
DOM解析
以下以GDataXMLNode为例:
1 2 3 4 5 6 7 8 9
| * <节点> (GDataXMLNode) * 根据 DOM,XML ⽂文档中的每个成分都是⼀一个节点。 * DOM 是这样规定的: * 整个⽂文档是⼀一个⽂文档节点 * 每个 XML 标签是⼀一个元素节点 * 包含在 XML 元素中的⽂文本是⽂文本节点 * 每⼀一个 XML 属性是⼀一个属性节点 * 注释属于注释节点 
|
- 导入第三方库
1 2 3 4 5
| 导入第三方库时,首先编译检查是否可用,(头文件是否编译通过,头文件是否需要导入头文件路径,是否使用非ARC环境) 1. 头文件编译未通过,添加文件搜索路径,头文件为系统头文件时:在Build setting下的Header Search Paths 添加/usr/include/libxml2 头文件为用户头文件时:在Build setting下的User Header Search Paths 添加/usr/include/libxml2 2. 在Build Phases 下的Link Binary With Libraries 添加libxml2.dylib,链接的动态库 3. 在Build Phases 下的Compile Sources 将导入的编译文件设置为非ARC 即添加 -fno-objc-arc即可
|
- 创建GDataXMLDocument对象
1 2
| NSData *data = [[NSBundle mainBundle] URLForResource:@"bokstore" withExternsion:"xml"]; GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithData:data options:0 error:nil];
|
- 获取根元素rootElement
- 由根元素,可以获取到根元素下的子元素,以及对子元素的属性赋值;
1 2 3 4 5 6
| 获取子元素的方法: - (NSArray *)elementsForName:(NSString *)name; 获取子元素属性的方法: - (GDataXMLNode *)attributeForName:(NSString *)name; 将GDataXMLNode对象转换为NSString对象的方法: - (NSString *)stringValue;
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| for (GDataXMLElement *element in elements) { // 创建图书对象 YMBook *book = [[YMBook alloc] init]; // 根据属性名字,解析book元素的属性值 book.category = [[element attributeForName:kCategory] stringValue]; // 解析book的⼦子元素包含的⽂文本内容及其⼦子元素的属性 [0]; GDataXMLElement *titleElement = [element elementsForName:kTitle] book.title = [titleElement stringValue]; book.lang = [[titleElement attributeForName:kLanguage] stringValue]; GDataXMLElement *authorElement = [element elementsForName:kAuthor][0]; book.author = [authorElement stringValue]; GDataXMLElement *yearElement = [element elementsForName:kYear] [0]; book.year = [yearElement stringValue]; GDataXMLElement *priceElement = [element elementsForName:kPrice] [0]; book.price = [priceElement stringValue];  [_bookStore addObject:book]; }
|
JSON
1.数据分类
从结构上看,所有的数据(data)最终都可以分解成三种类型:
- 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字 (numbers),比如"北京"这个单独的词
- 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一 起,又叫做数组(array)或列表(List),比如"北京,上海"
- 第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个 名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比 如"首都:北京"
Douglas Crockford发明了JSON,Json的规定非常简单:
并列的数据之间用逗号(“, “)分隔
映射用冒号(“: “)表示
并列数据的集合(数组)用方括号(“[]”)表示
映射的集合(对象)用大括号(“{}”)表示
比如,下面这句话:
“”北京市的⾯面积为16800平⽅方公⾥里,常住⼈人⼜⼝口1600万⼈人。上海市的⾯面积为6400平⽅方 公⾥里,常住⼈人⼜⼝口1800万。”
写成JSON格式就是这样:
1 2 3 4
| [  {"城市":"北京","⾯面积":16800,"⼈人⼝口":1600},  {"城市":"上海","⾯面积 ]
|
如果事先知道数据的结构,上面的写法还可以进一步简化:
1 2 3 4
| [ ["北京",16800,1600], ["上海",6400,1800] ]
|
NSJSONSerialization
1 2 3 4 5 6 7 8 9 10
| - 反序列 + (id)JSONObjectWithData:(NSData *)data error:(NSError **)error options:(NSJSONReadingOptions)opt error:(NSError **)error - 序列化 + (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt 
|
JSONKit
- 需要导入第三方库
使用: -fno-objc-arc
序列化: NSArray NSDictionary NSString

1 2 3 4 5 6 7 8 9 10 11 12
| – JSONData – JSONDataWithOptions:includeQuotes:error: - JSONDataWithOptions:serializeUnsupportedClassesUsingDelegate:selector:error: - JSONDataWithOptions:serializeUnsupportedClassesUsingBlock:error: – JSONString – JSONStringWithOptions:includeQuotes:error: - JSONStringWithOptions:serializeUnsupportedClassesUsingDelegate:selector:erro r: – JSONStringWithOptions:serializeUnsupportedClassesUsingBlock:error: 
|
反序列化:NSData NSString
1 2 3 4 5 6 7 8 9 10 11 12 13
| – objectFromJSONData – objectFromJSONDataWithParseOptions: – objectFromJSONDataWithParseOptions:error: – mutableObjectFromJSONData – mutableObjectFromJSONDataWithParseOptions: – mutableObjectFromJSONDataWithParseOptions:error: – objectFromJSONString – objectFromJSONStringWithParseOptions: – objectFromJSONStringWithParseOptions:error: – mutableObjectFromJSONString – mutableObjectFromJSONStringWithParseOptions: – mutableObjectFromJSONStringWithParseOptions:error: 
|