UIステップ:データ解析(XML解析とJSON解析)

5651 ワード


IOSデータ解析は主にXML解析とJSON解析の2つの方法があり、以下ではローカルデータとして説明する.
XML解析
以下は簡単で不完全なXMLコードです.

    
          
         
        24
    
    
          
         
        25
    
    
          
         
        40
    

各XMLファイルは一つのセットの唯一のルートノードを持っています.ルートノードの下にいくつかのサブノードがあります.各サブノードはまた三つの自分のサブノードを含みます.
代表的なのはスタートラベルです.
各ノードに対して、もし<>と<>の間にコンテンツがあるなら、このノードが含むコンテンツを表す.このノードが含まれているということを説明する場合、つまり改行です.
XML解析は主に二つの方式があります.SAX解析とDOM解析です.
SAX解析はシステム系NSXMLParserを用いて解析します.
// 1、        (                 )
    NSString *filePath = [[NSBundle mainBundle]pathForResource:@"Teacher" ofType:@"xml"];

    // 2、          (NSData)
    NSData *data = [NSData dataWithContentsOfFile:filePath];
   
    // 3、   NSXMLParser  ,   data   
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
 代理店を設置して、先に契約を遵守してください.
SAX解析はパースメソッドを呼び出す必要があります.そうでないと代理方法には行かないです.
//          ,          
    [parser parse];
主に使う方法
  • URLインタフェースに基づいてデータを解析する  - (instancetype)initWithContentsOfURL:(NSURL *)url;
  • ローカルデータに基づいて解析する.  - (instancetype)initWithData:(NSData *)data;
  • 解析を開始する.  - (BOOL)parse;
  • SAX解析を適用するには主に5つの代理方法が必要です.
    1、解析を開始するときに呼び出す方法(ルートノードの読み取りを開始するときに呼び出す方法)
    - (void)parserDidStartDocument:(NSXMLParser *)parser {
        NSLog(@"    !");
        self.modelArray = [NSMutableArray array];
    }
    
    2、スタートラベルを読み込んだときに呼び出す方法
    //                
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
        NSLog(@"    :%@",elementName);
    }
    
    3、ラベルの内容を読み取ったときに呼び出す方法
    //               
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
        NSLog(@"    :%@",string);
        //     string    /n,   /n,                  ;        ,                  
    }
    
    4、終了ラベルを読み込んだときに呼び出す方法
    //                
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
        NSLog(@"    :%@",elementName);
    }
    5、解析終了時に呼び出す方法
    //              
    - (void)parserDidEndDocument:(NSXMLParser *)parser {
        NSLog(@"    !");
    }
    
    DOM解析はGoogleが提供するGDataXMLNode解析を利用しています.
    //  1、       
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Teacher" ofType:@"xml"];
        
        //  2、         
        NSData *data = [NSData dataWithContentsOfFile:filePath];
        
        // 3、  GDataXMLDocument    
        GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; //   &error         
        
        //  1.       
        GDataXMLElement *rootElement = [document rootElement];
        
        
        //  2、          
        NSArray *childArray = [rootElement children];
        
        //  model        
        self.modelArray = [NSMutableArray array];
        
        for (int i = 0; i < childArray.count; i++) {
            //  model    
            Model *model = [[Model alloc] init];
            //        
            GDataXMLElement *oneElement = childArray[i];
            //    name  
            NSArray *nameArray = [oneElement elementsForName:@"name"];
            //    name   
            GDataXMLElement *nameElement = nameArray[0];
            //  6、     
            NSString *nameString = [nameElement stringValue];
            model.name = nameString;
        }
        
    }
    
    JSON解析
    まず、モデルファイルでデータソースファイルと同じ属性名を宣言します.
    @property (nonatomic,copy)NSString *address;
    @property (nonatomic,copy)NSString *cinemaName;
    modelの.hファイルでは、配列の作成とデータの解析と値model属性の作成を完了する方法を宣言します.
    //                         model     ,        ,     self.modelArray        
    + (NSMutableArray *)modelConfigureJson:(NSDictionary *)jsonDic;
    modelの.mでこの方法を実現します.
    + (NSMutableArray *)modelConfigureJson:(NSDictionary *)jsonDic {
        NSMutableArray *modelArray = [NSMutableArray array];
        //   result     
        NSDictionary *resultDic = [jsonDic objectForKey:@"result"];
        //   data  key      
        NSArray *dataArray = [resultDic objectForKey:@"data"];
        //      ,    N   ,         model
        for (NSDictionary *dataDic in dataArray) {
            Model *model = [[Model alloc] init];
            //         key    value     model  key      ,  model     key           ,       model    setValueForUndeFinedKey    (     )    
            //    key    value       ,                    
            [model setValuesForKeysWithDictionary:dataDic];
            [modelArray addObject:model];
            [model release];
        }
        return modelArray;
    }
    
    controller類でシステムクラスを利用してJSONデータを解析します.
    - (void)jsonWithSysytem {
        //  1、       
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"DouBan" ofType:@"json"];
        
        //  2、         
        NSData *data = [NSData dataWithContentsOfFile:filePath];
        
        // 3、             ,     ,      ,     ,      ,           
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        
        self.modelArray = [Model modelConfigureJson:dic];
    }