XML、JSON数据解析

解析:



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 ;
    }
   
}




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 ];
    }
   
   
}

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 ];
    }


第三方JSON解析包:JSONkit ,  SBJOSN
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr__Hacker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值