ios GDataXML(DOM)解析分区表格

GDataXML是Google开发的一个XML解析库,轻便,特点使用非常简单,支持XPath。

前言:GDataXML是google基于C语言写的第三方框架,该源码文件就一个类,看其源码,基本使用了C语言的底层的很多lib编译库代码,所以刚导入使用,会报错提示需要设置导入需要的链接库。 另外,该第三方框架并没有纳入Cocoapods,所以通过pod搜索不到这个框架。

使用第三方框架有两种方式:

1:使用手动导包  下载网址  http://xiazai.jb51.net/201602/yuanma/GDataXML(jb51.net).zip

下载完成导入项目编译会出现

第一步:

ios GDataXML(DOM)解析分区表格_第1张图片

第二步:

ios GDataXML(DOM)解析分区表格_第2张图片

第三步:

ios GDataXML(DOM)解析分区表格_第3张图片

这样编译一下报错就会消失了!!!

手写xml文档


ios GDataXML(DOM)解析分区表格_第4张图片


-----------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

你可能感兴趣的:(ios GDataXML(DOM)解析分区表格)