数据解析_SAX DOM JSON概述

    通常数据解析有两种方式,一种是XML解析,另一种是Json解析,这两种解析方式是我们经常用到并且也是很使用的解析方式,当然既然有相同的特点也会有各自不同的优缺点,下面就让我们仔细的分析一下这两种解析方法吧!

   首先让我们先分析一下SAX解析方法,SAX是一种XML的替代方法。相比于DOM,SAX是一种更快捷更有效的方法,它会对文档逐行扫描从而可以在解析文档时能够任意停止,但是它的过程是比较复杂的.下面让我们看一看关于它解析过程的代码.

    1.在我们开始解析之前要获取文档的路径,然后去创建一个协议因为在这里使用协议传值.

 NSString *str = [[NSBundle mainBundle]pathForResource:@"Student" ofType:@"xml"];
    
    NSData *datt =[NSData dataWithContentsOfFile:str];
    NSString * stt = [[NSString alloc]initWithData:datt encoding:NSUTF8StringEncoding];
    NSLog(@"%@",stt);
    
    NSXMLParser * parser = [[NSXMLParser alloc]initWithData:datt];
    parser.delegate = self;
    //开始解析
    [parser parse];
     2.在这里我创建一个model,然后将每一个student添加到一个model中,再将每一个model添加到一个大数组中.
static NSString *KStudents = @"students";
static NSString *KStudent = @"student";
static NSString *KNumber = @"number";
static NSString *KPhone = @"phone";
static NSString *KName = @"name";
//开始解析
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
    NSLog( @"parser ==%@ ele=====%@ name====%@ qName====%@ attribut=====%@",parser,elementName,namespaceURI,qName,attributeDict);
    
    if ([elementName isEqualToString:KStudent]) {
        SaxModel *model = [[SaxModel alloc]init];
        [_arr addObject:model];
        [model release];
        
    }
    
    
}

 

3.接下来就是我们解析过程中最重要的环节了,从解析出来的数据中取出每一个student里面的属性值

//结束解析
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    NSLog( @"parser ??==%@ ele??=====%@ name??====%@ qName??====%@ ",parser,elementName,namespaceURI,qName);
    SaxModel *model = [_arr lastObject];
    
    if ([elementName isEqualToString:KNumber]) {
        model.number = _nss;
        
        
    }
    if ([elementName isEqualToString:KName]) {
        model.name = _nss;
        
    }
    if ([elementName isEqualToString:KPhone]) {
        model.phone = _nss;
        
    }

    if ([elementName isEqualToString:KStudents]) {
        
    
        [self.mydelegate sendMessage:_arr];
        
    }
    

}
4.接下来就是查找内容
//查找内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    
    
    _nss = [string copy];
    
    NSLog( @"parser ??++++++==%@ string??+++++++=====%@  ",parser,string);
    
}


以上是我分享的SAX解析,接下来让我们看看DOM是如何进行解析的.

同样我们还是以student为例.

下面请看代码演示.

在这里我同样创建一个model类,首先我们要获得根节点,然后获得节点中的内容.

-(void)domParserAttributes{
    
    NSString *path = [[NSBundle mainBundle]pathForResource:@"citys" ofType:@"xml"];
    NSData *data = [NSData dataWithContentsOfFile:path];
    
    NSError *error = Nil;
    GDataXMLDocument * document = [[GDataXMLDocument alloc]initWithData:data options:GDataXMLDocumentKind error:&error];
    if (error) {
        NSLog(@"erro!!!!!!!!====%@",error);
    }
    //获得根节点
    GDataXMLElement *root = [document rootElement ];
    NSLog(@"root!!!!!!!!!!!==%@",root);
    
    GDataXMLElement *citys = [[root children] lastObject];
    NSArray *city = [citys children];
    
    for (GDataXMLElement *elenemt in city) {
        NSArray *discripte = [elenemt children];
        
        for (GDataXMLElement *value in discripte) {
            DomModel * mo = [[DomModel alloc]init];
            [_arr addObject:mo];

            
            if ([[value name] isEqualToString:@"name" ])
            {
                [_arr lastObject];
                GDataXMLNode *node = [value attributeForName:@"data"];
                
                mo.name = [node stringValue];
            }
            if ([[value name]isEqualToString:@"longitude_e6"]) {
                
                DomModel *mo = [_arr lastObject];
                GDataXMLNode *node = [value attributeForName:@"data"];
                mo.longitude_e6 = [node stringValue];
                
            }
            if ([[value name]isEqualToString:@"latitude_e6"]) {
                DomModel *mo = [_arr lastObject];
                GDataXMLNode *node = [value attributeForName:@"data"];
                mo.latitude_e6 = [node stringValue];
            }
            
        }
    }
}
DOM和SAX相比谁更简洁我想大家早就一目了然了,那么接下来让我们看看JSON是怎么样解析的吧!


同样第一步我们还是要获取路径,然后我们用字典获取里面的内容,最后将数据里面的所有KEY值添加到数组中.

-(void)JsonParser
{
    NSString * path =  [[NSBundle mainBundle]pathForResource:@"citys" ofType:@"txt"];
    
    NSData * data = [NSData dataWithContentsOfFile:path];
    NSError * error = Nil;
    NSDictionary * dic= [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:&error];
    
    [_arr addObjectsFromArray:[dic objectForKey:@"cities"]];
    
}




以上就是我要分享的全部内容,本人才疏学浅如果以上知识点有不准确的地方忘请见谅! 希望您多关注本人的博客,以后还会有更多的知识点与大家分享,谢谢您的关注!




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值