GDataXML是Google开发的一个XML解析库,轻便,特点使用非常简单,支持XPath。
前言:GDataXML是google基于C语言写的第三方框架,该源码文件就一个类,看其源码,基本使用了C语言的底层的很多lib编译库代码,所以刚导入使用,会报错提示需要设置导入需要的链接库。 另外,该第三方框架并没有纳入Cocoapods,所以通过pod搜索不到这个框架。
使用第三方框架有两种方式:
1:使用手动导包 下载网址 http://xiazai.jb51.net/201602/yuanma/GDataXML(jb51.net).zip
下载完成导入项目编译会出现
第一步:
第二步:
第三步:
这样编译一下报错就会消失了!!!
手写xml文档
-----------Hero.h-------------
#import@interface Hero : NSObject
@property(nonnull,strong)NSString *name,*like;
@end
------------ViewController.m---------------
#import "ViewController.h"#import "GDataXMLNode.h"#import "Hero.h"@interface ViewController (){ NSMutableDictionary *_dic; UITableView *_table;}@end#define TEST_URL @"http://127.0.0.1/1508ESort.xml"@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. _table = [[UITableView alloc]initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStyleGrouped]; _table.delegate = self; _table.dataSource = self; [self.view addSubview:_table]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *task = [session dataTaskWithURL:[NSURL URLWithString:TEST_URL] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:data options:0 error:nil]; GDataXMLElement *rootEle = [doc rootElement]; _dic = [[NSMutableDictionary alloc]init]; for (GDataXMLElement * sortEle in [rootEle elementsForName:@"sort"]) { //准备字典的 key 英雄类型 ===kind //sortEle---NSString *kindStr = [[sortEle attributeForName:@"kind"] stringValue];
NSMutableArray *arr = [[NSMutableArray alloc]init];
for (GDataXMLElement *heroEle in [sortEle elementsForName:@"hort"]) {
Hero *he = [[Hero alloc]init];
he.name = [[[heroEle elementsForName:@"name"] firstObject] stringValue];
he.like = [[[heroEle elementsForName:@"like"] firstObject] stringValue];
[arr addObject:he];
}
//给字典设置数值
//以英雄类型为key 以该类型的英雄数组为值
[_dic setObject:arr forKey:kindStr];
}
dispatch_async(dispatch_get_main_queue(), ^{
[_table reloadData];
});
}];
[task resume];
}
//表格的分区数
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
//字典中的key值得数量就是表格的分区数
return _dic.count;
}
//表格每个分区中的行数
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSString *key = [_dic.allKeys objectAtIndex:section];
return [[_dic objectForKey:key] count];
}
//创建表格单元格中的内容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//复用池机制
static NSString *cellId = @"cellid";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
//设置表格的样式
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellId];
}
//获取对应的key值,从key值中判断需要获取的数据来为单元格赋值
NSString *key = [_dic.allKeys objectAtIndex:indexPath.section];
cell.textLabel.text = [[[_dic objectForKey:key] objectAtIndex:indexPath.row] name];
cell.detailTextLabel.text = [[[_dic objectForKey:key] objectAtIndex:indexPath.row] like];
return cell;
}
//表格中每个分区的标题
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
return [_dic.allKeys objectAtIndex:section];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end