解析就是从事先规定好的格式中提取数据
XML的解析方式有两种 SAX解析 DCM解析(安卓有一个PULL)
SAX解析:
NSString *path = [[NSBundle mainBundle] pathForResource:@"Message" ofType:@"txt"];
NSData *data = [NSData dataWithContentsOfFile:path];
开始解析
1 创建解析对象 绑定数据
NSXMLParser *parse = [[NSXMLParser alloc] initWithData:data];
2 指定代理 记得要引入代理
parse.delegate = self;
3 开始解析
[parse parse];
// 开始解析文档的方法
- (void)parserDidStartDocument:(NSXMLParser *)parser{ };
// 开始解析解析标签的方法
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary
// 解析中间数据项
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { };
// 结束解析标签
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { };
// 结束解析文档
- (void)parserDidEndDocument:(NSXMLParser *)parser { };
当文件书写错误的时候可以调用这个方法来查看
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{ };
DOM解析:
拿到解析数据
NSString *path = [[NSBundle mainBundle] pathForResource:@"Message" ofType:@"txt"];
NSData *data = [NSData dataWithContentsOfFile:path];
创建解析对象
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
拿到根节点
GDataXMLElement *root = doc.rootElement;
// 拿到子节点
NSArray *modelArray = root.children;
// 初始化data数组
self.data = [NSMutableArray array];
// 遍历数组取到每一个model对应的节点
for (GDataXMLElement *modelEle in modelArray) {
Person *p = [[Person alloc] init];
// 获得属性节点数组
NSArray *proArray = modelEle.children;
for (GDataXMLElement *proEle in proArray) {
[p setValue:proEle.stringValue forKey:proEle.name];
}
[self.data addObject:p];
}
使用系统提供的类进行json解析
NSString *path = [[NSBundle mainBundle] pathForResource:@"Json" ofType:@"txt"];
NSData *data = [NSData dataWithContentsOfFile:path];
//
NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
self.data = [NSMutableArray array];
for (NSDictionary *dic in array) {
Person *p = [[Person alloc] init];
[p setValuesForKeysWithDictionary:dic];
[self.data addObject:p];
}
使用 jsonkit 进行json解析: 需要引入jsonkit文件
NSString *path = [[NSBundle mainBundle] pathForResource:@"Json" ofType:@"txt"];
NSData *data1 = [NSData dataWithContentsOfFile:path];
//
NSArray *array = [data1 objectFromJSONData];
// 初始化数组
self.data = [NSMutableArray array];
// 遍历数组
for (NSDictionary *dic in array) {
Person *p = [[Person alloc] init];
[p setValuesForKeysWithDictionary:dic];
[self.data addObject:p];
}