IOS 高级编程 XML 数据结构解析
来源:互联网 发布:淘宝网可爱宝贝纸尿裤 编辑:程序博客网 时间:2024/06/09 19:53
所谓的解析无非就是:从事先规定好的格式中提取数据。
我们先用代码把 XML 引入进来, 代码如下:
执行解析协议
解析的具体过程
IOS 开发常见的解析:XML 解析 (用的不是很多, 大约20%左右,一般大项目能用到)、 JSON解析(这个用得非常的多)
XML 数据结构的语法:
一对尖括号代表一个节点,或者标签
只有一个根节点
节点可以互相嵌套
没有子节点的节点称谓叶子节点
让我们在自己的工程中创建一个Property List
<root> <stu_list> <stu_array name="A"> <student> <name>刘喆</name> <age>18</age> <tel>120</tel> </student> <student> <name>刘少辉</name> <age>12</age> <tel>114</tel> </student> </stu_array> <stu_array name="B"> <student> <name>龚宁</name> <age>17</age> <tel>114</tel> </student> <student> <name>吴东洋</name> <age>10</age> <tel>888</tel> </student> </stu_array> </stu_list></root>
我们先用代码把 XML 引入进来, 代码如下:
#pragma mark#pragma Dom 解析- (void)domParser{ NSString *Path = [[NSBundle mainBundle]pathForResource:@"Student" ofType:@"xml" ]; //将这东西转换格式二进制对象 NSData *data = [NSData dataWithContentsOfFile:Path];// NSError *error = nil; GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:GDataXMLElementKind error:NULL]; GDataXMLElement *root = [doc rootElement]; NSLog(@"root === %@",root); NSArray *arr = [root elementsForName:@"stu_list"]; GDataXMLElement *stu_list = [arr firstObject]; NSArray *stuarray = [stu_list elementsForName:@"stu_array"];//获得节点名为stu_array的所有节点 for (GDataXMLElement *stuA in stuarray) { GDataXMLNode *node = [stuA attributeForName:@"name"]; NSString *attStr = [node stringValue];//取节点所对应的内容 NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setObject:attStr forKey:@"name"]; NSMutableArray *array = [NSMutableArray array]; [dic setObject:array forKey:@"array"]; [_tableArray addObject:dic]; //获得节点名字为sutdents的所有节点 NSArray *students = [stuA elementsForName:@"student"]; for (GDataXMLElement *stu in students) { StuModel *model = [[StuModel alloc]init]; [array addObject:model]; [model release]; //获得所有student的子节点 NSArray *children = [stu children]; for (GDataXMLElement *child in children) { //取出节点内容 NSString *childValue = [child stringValue]; //判断节点名 if ([[child name] isEqualToString:@"name"]) { model.name = childValue; } if ([[child name] isEqualToString:@"age"]) { model.age = childValue; }if ([[child name] isEqualToString:@"tel"]) { model.tel = childValue; } } } } NSLog(@"arr====%@",stuarray); }
执行解析协议
@interface SaxXmlParser : NSObject<NSXMLParserDelegate>{ NSMutableArray *_stuArray; }@property (nonatomic,retain)NSString *currentValue;@property (nonatomic,assign)id<SaxmlParserDelegate>delegate;- (void)startParser;
解析的具体过程
//sax 解析啦- (void)startParser{ //找路径 在BUNDLE包里 NSString *Path = [[NSBundle mainBundle]pathForResource:@"Student" ofType:@"xml" ]; //将这东西转换格式二进制对象 NSData *data = [NSData dataWithContentsOfFile:Path]; //初始化 NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithData:data]; xmlParser.delegate = self; [xmlParser parse];//执行解析 }static NSString *kRoot = @"root";static NSString *kStuArray = @"stu_array";static NSString *kStudent = @"student";static NSString *kName = @"name";static NSString *kAge = @"age";static NSString *kTel = @"tel";- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{// NSLog(@"parser=====%@,elementName======%@,namespaceURT ======%@,qName========%@,attributeDict=======%@",parser,elementName,namespaceURI,qName,attributeDict);// NSLog(@"%s======3",__func__); if ([elementName isEqualToString:kStuArray]) { NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic addEntriesFromDictionary:attributeDict];//把另外一个字典所有内容取出来放在领一个字典内 NSMutableArray *arr = [NSMutableArray array]; [dic setObject:arr forKey:@"array"]; [_stuArray addObject:dic];//把整体的字典给大数组 } if ([elementName isEqualToString:kStudent]) { StuModel *model = [[StuModel alloc] init]; NSMutableDictionary *lastDic = [_stuArray lastObject]; NSMutableArray *lastArr = [lastDic objectForKey:@"array"]; [lastArr addObject:model]; [model release]; }}- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ NSLog(@"parser======%@,string=======%@",parser,string); NSLog(@"%s=====1",__func__); self.currentValue = string; }- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ if ([elementName isEqualToString:kName]) {//名字判断 NSMutableDictionary *dic = [_stuArray lastObject]; NSMutableArray *array = [dic objectForKey:@"array"]; StuModel *model = [array lastObject]; model.name = _currentValue; } if ([elementName isEqualToString:kAge]) {//年龄判断 NSMutableDictionary *dic1 = [_stuArray lastObject]; NSMutableArray *array = [dic1 objectForKey:@"array"]; StuModel *model1 = [array lastObject]; model1.age = _currentValue; } if ([elementName isEqualToString:kTel]) {//手机判断 NSMutableDictionary *dic1 = [_stuArray lastObject]; NSMutableArray *array = [dic1 objectForKey:@"array"]; StuModel *model1 = [array lastObject]; model1.tel = _currentValue; } if ([elementName isEqualToString:kRoot]) { NSLog(@"stuArray===========%@",_stuArray); [self.delegate parserFinished:_stuArray]; } NSLog(@"%s=======2",__func__);}
0 0
- IOS 高级编程 XML 数据结构解析
- iOS编程------XML、JSON数据结构解析
- Python高级编程(五)XML解析
- IOS编程 之 XML解析
- iOS之JSON,XML数据结构解析
- iOS 网络编程 (五)XML解析
- 高级编程之数据结构
- Java高级编程--数据结构
- iOS网络编程开发—JSON解析与XML解析
- XML数据结构解析
- XML数据结构解析
- XML数据结构解析
- XML.JSON数据结构解析
- XML、JSON数据结构解析
- XML数据结构 SAX 解析
- XML,JSON数据结构解析
- ios高级编程相关
- iOS高级网络编程
- IOS 中级数据持久化 数据库
- 一个指向二维数组元素的指针变量,内存地址怎么不连续?
- 高并发量网站解决方案
- 2014,暑假,前进加奋斗。
- java部分知识
- IOS 高级编程 XML 数据结构解析
- STL学习(一)map容器学习
- html练习(1)
- 详解 QT 布局管理界面 图文并茂
- day day up--Android开发MediaPlayer声音播放
- 解析xml文件
- 本地存储的读写
- 帮助认识理解NODE的经典
- sqlite3方法的使用