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];
主に使う方法- (instancetype)initWithContentsOfURL:(NSURL *)url;
- (instancetype)initWithData:(NSData *)data;
- (BOOL)parse;
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];
}