解析:
XML解析
XML:可扩展性标记语言 主流数据格式之一
功能:数据交换 、web服务 、内容管理 、 用作配置文件(重点)
SAX 解析-->逐行解析(采用协议回调机制)
实现协议
NSXMLParserDelegate
- (
void
)startParse
{
//xml 解析:逐行解析
// 从文件列表中读取数据
//1. 获得文件路径
NSString *sourcePath = [[ NSBundle mainBundle ] pathForResource : @"Student" ofType : @".xml" ];
//2. 通过路径把文件转换成 NSData 类型
NSData *data = [ NSData dataWithContentsOfFile :sourcePath];
// 创建的时候需要给 parser 一个字符串数据 (NSData)
NSXMLParser *parser = [[ NSXMLParser alloc ] initWithData :data];
// 设定代理人
parser. delegate = self ;
// 开始对文件进行解析
[parser parse ];
}
- ( void )parser:( NSXMLParser *)parser didStartElement:( NSString *)elementName namespaceURI:( NSString *)namespaceURI qualifiedName:( NSString *)qName attributes:( NSDictionary *)attributeDict
{
// 当找到节点的时候,系统调用这个方法
NSLog ( @" 节点头 " );
if ([elementName isEqualToString : @"students" ]) {
// 当找到 students 节点的时候,初始化数组
self . arr = [ NSMutableArray array ];
} else if ([elementName isEqualToString : @"student" ]) {
// 当找到 student 节点的时候,创建一个 student 对象 添加到数组里
Student *stu = [[ Student alloc ] init ];
[ self . arr addObject :stu];
[stu release ];
}
}
- ( void )parser:( NSXMLParser *)parser foundCharacters:( NSString *)string
{
// 当节点找到内容的时候,调用
NSLog ( @" 节点内容 " );
// 把内容保存起来
self . tempStr = string;
}
- ( void )parser:( NSXMLParser *)parser didEndElement:( NSString *)elementName namespaceURI:( NSString *)namespaceURI qualifiedName:( NSString *)qName
{
// 当找到节点结尾的时候调用
NSLog ( @" 节点尾 " );
Student *stu = [ self . arr lastObject ];
if ([elementName isEqualToString : @"number" ]) {
stu. number = self . tempStr ;
} else if ([elementName isEqualToString : @"name" ]){
stu. name = self . tempStr ;
} else if ([elementName isEqualToString : @"sex" ]){
stu. sex = self . tempStr ;
} else if ([elementName isEqualToString : @"phone" ]){
stu. phone = self . tempStr ;
}
}
{
//xml 解析:逐行解析
// 从文件列表中读取数据
//1. 获得文件路径
NSString *sourcePath = [[ NSBundle mainBundle ] pathForResource : @"Student" ofType : @".xml" ];
//2. 通过路径把文件转换成 NSData 类型
NSData *data = [ NSData dataWithContentsOfFile :sourcePath];
// 创建的时候需要给 parser 一个字符串数据 (NSData)
NSXMLParser *parser = [[ NSXMLParser alloc ] initWithData :data];
// 设定代理人
parser. delegate = self ;
// 开始对文件进行解析
[parser parse ];
}
- ( void )parser:( NSXMLParser *)parser didStartElement:( NSString *)elementName namespaceURI:( NSString *)namespaceURI qualifiedName:( NSString *)qName attributes:( NSDictionary *)attributeDict
{
// 当找到节点的时候,系统调用这个方法
NSLog ( @" 节点头 " );
if ([elementName isEqualToString : @"students" ]) {
// 当找到 students 节点的时候,初始化数组
self . arr = [ NSMutableArray array ];
} else if ([elementName isEqualToString : @"student" ]) {
// 当找到 student 节点的时候,创建一个 student 对象 添加到数组里
Student *stu = [[ Student alloc ] init ];
[ self . arr addObject :stu];
[stu release ];
}
}
- ( void )parser:( NSXMLParser *)parser foundCharacters:( NSString *)string
{
// 当节点找到内容的时候,调用
NSLog ( @" 节点内容 " );
// 把内容保存起来
self . tempStr = string;
}
- ( void )parser:( NSXMLParser *)parser didEndElement:( NSString *)elementName namespaceURI:( NSString *)namespaceURI qualifiedName:( NSString *)qName
{
// 当找到节点结尾的时候调用
NSLog ( @" 节点尾 " );
Student *stu = [ self . arr lastObject ];
if ([elementName isEqualToString : @"number" ]) {
stu. number = self . tempStr ;
} else if ([elementName isEqualToString : @"name" ]){
stu. name = self . tempStr ;
} else if ([elementName isEqualToString : @"sex" ]){
stu. sex = self . tempStr ;
} else if ([elementName isEqualToString : @"phone" ]){
stu. phone = self . tempStr ;
}
}
DOM解析-->节点解析
- (
void
)startDOMParse
{
// 按节点解析
//1. 获取解析的文件信息
NSString *xmlPath = [[ NSBundle mainBundle ] pathForResource : @"Student" ofType : @".xml" ];
NSData *data = [ NSData dataWithContentsOfFile :xmlPath];
// 参数 1: 要解析的 xml 串 参数 2: 随便 参数 3: 错误信息
GDataXMLDocument *doc = [[ GDataXMLDocument alloc ] initWithData :data options : 0 error : nil ];
//2. 获取文件的根节点
GDataXMLElement *rootElement = [doc rootElement ];
//3. 进一步搜索所有的子节点
// 返回一个装满了 student 节点( GDataXMLElement 对象)的数组
NSArray *stuArrray = [rootElement elementsForName : @"student" ];
//4. 遍历数组,把 student 节点的每个子节点取出来
for ( GDataXMLElement *element in stuArrray) {
Student *stu = [[ Student alloc ] init ];
GDataXMLElement *nameElement = [[element elementsForName : @"name" ] lastObject ];
// 从 name 节点中取值
NSString *value = [nameElement stringValue ];
// 给学生对象的属性赋值
stu. name = value;
GDataXMLElement *numberElement = [[element elementsForName : @"number" ] lastObject ];
value = [numberElement stringValue ];
stu. number = value;
[ self . stuDomArray addObject :stu];
[stu release ];
}
}
{
// 按节点解析
//1. 获取解析的文件信息
NSString *xmlPath = [[ NSBundle mainBundle ] pathForResource : @"Student" ofType : @".xml" ];
NSData *data = [ NSData dataWithContentsOfFile :xmlPath];
// 参数 1: 要解析的 xml 串 参数 2: 随便 参数 3: 错误信息
GDataXMLDocument *doc = [[ GDataXMLDocument alloc ] initWithData :data options : 0 error : nil ];
//2. 获取文件的根节点
GDataXMLElement *rootElement = [doc rootElement ];
//3. 进一步搜索所有的子节点
// 返回一个装满了 student 节点( GDataXMLElement 对象)的数组
NSArray *stuArrray = [rootElement elementsForName : @"student" ];
//4. 遍历数组,把 student 节点的每个子节点取出来
for ( GDataXMLElement *element in stuArrray) {
Student *stu = [[ Student alloc ] init ];
GDataXMLElement *nameElement = [[element elementsForName : @"name" ] lastObject ];
// 从 name 节点中取值
NSString *value = [nameElement stringValue ];
// 给学生对象的属性赋值
stu. name = value;
GDataXMLElement *numberElement = [[element elementsForName : @"number" ] lastObject ];
value = [numberElement stringValue ];
stu. number = value;
[ self . stuDomArray addObject :stu];
[stu release ];
}
}
JSON解析
//
系统提供的
json
解析方法
NSString *jsonPath = [[ NSBundle mainBundle ] pathForResource : @"Student" ofType : @"txt" ];
NSData *data = [ NSData dataWithContentsOfFile :jsonPath];
NSError *error = nil ;
// 参数 1: 文件数据 参数 2: 设置解析的结果 参数 3: 错误信息
NSArray *array = [ NSJSONSerialization JSONObjectWithData :data options : NSJSONReadingMutableContainers error :&error];
NSLog ( @"%@" ,array);
for ( NSDictionary *dic in array) {
Student *stu = [[ Student alloc ] init ];
stu. name = [dic objectForKey : @"name" ];
stu. sex = [dic objectForKey : @"sex" ];
stu. phone = [dic objectForKey : @"phone" ];
stu. number = [dic objectForKey : @"number" ];
[ self . stuArray addObject :stu];
[stu release ];
}
NSString *jsonPath = [[ NSBundle mainBundle ] pathForResource : @"Student" ofType : @"txt" ];
NSData *data = [ NSData dataWithContentsOfFile :jsonPath];
NSError *error = nil ;
// 参数 1: 文件数据 参数 2: 设置解析的结果 参数 3: 错误信息
NSArray *array = [ NSJSONSerialization JSONObjectWithData :data options : NSJSONReadingMutableContainers error :&error];
NSLog ( @"%@" ,array);
for ( NSDictionary *dic in array) {
Student *stu = [[ Student alloc ] init ];
stu. name = [dic objectForKey : @"name" ];
stu. sex = [dic objectForKey : @"sex" ];
stu. phone = [dic objectForKey : @"phone" ];
stu. number = [dic objectForKey : @"number" ];
[ self . stuArray addObject :stu];
[stu release ];
}
第三方JSON解析包:JSONkit , SBJOSN