4_2网络学习第二天--XML解析
1、XML的数据:
<?xml version="1.0" encoding="utf-8" ?> (表示XML文件版本)
<CityName>北京</CityName> (一个节点,CityName是结点名,北京结点值)
<Item key="1" value="A"></Item> (key="1"是结点属性,key属性名,“1”属性值)
注意:XML是层次嵌套的结构
2、解析XML:
//开始加载数据
-(void)startDownloadData
{
NSString *urlSring=[NSString stringWithFormat:MAIN_SHOP_URL,_city,_category,_offset,_pageSize];
_request=[[LCHttpRequest alloc]init];
[_request requestUrl:urlSring target:self action:@selector(dealDownloadFinish:)];
}
//加载完成后,解析和处理数据
-(void)dealDownloadFinish:(LCHttpRequest *)request
{
//解析XML -利用第三方开源库 GDataXMLDocument
GDataXMLDocument *doc=[[GDataXMLDocument alloc]initWithData:request.data options:0 error:nil];
NSArray *list=[doc nodesForXPath:@"//promotion" error:nil];
//利用CDataXMLElement获取
for (GDataXMLElement * promotion in list) {
PromotionModel *model=[[PromotionModel alloc]initWithGDataXMLElement:promotion];
[_allData addObject:model];
}
}
#import "PromotionModel.h"
@implementation PromotionModel
//封住数据模型-利用获得的GDataXMLElement
-(id)initWithGDataXMLElement:(GDataXMLElement *)element
{
if (self=[super init]) {
self.name=[[element elementsForName:@"name"][0] stringValue];
self.id=[[element elementsForName:@"id"][0] stringValue];
self.surl=[[element elementsForName:@"surl"][0] stringValue];
self.wsdimg=[[element elementsForName:@"wsdimg"][0] stringValue];
self.durl=[[element elementsForName:@"durl"][0] stringValue];
self.multipagetitle=[[element elementsForName:@"multipagetitle"][0] stringValue];
self.price=[[element elementsForName:@"price"][0] stringValue];
self.priceoff=[[element elementsForName:@"priceoff"][0] stringValue];
self.currentdealcount=[[element elementsForName:@"currentdealcount"][0] stringValue];
self.starttime=[[element elementsForName:@"starttime"][0] stringValue];
self.endtime=[[element elementsForName:@"endtime"][0] stringValue];
self.sevenrefundallowed=[[element elementsForName:@"sevenrefundallowed"][0] stringValue];
self.expirerefundallowed=[[element elementsForName:@"expirerefundallowed"][0] stringValue];
self.district=[[element elementsForName:@"district"][0] stringValue];
self.type2=[[element elementsForName:@"type2"][0] stringValue];
self.hassub=[[element elementsForName:@"hassub"][0] stringValue];
self.flag=[[element elementsForName:@"flag"][0] stringValue];
}
return self;
}
3、上拉刷新、下拉加载
利用第三方开源库是方便的:例如AH3DPullRefresh:
#pragma mark - 上拉刷新,下拉加载更多
-(void)addPullRefreahAndPullLoadMore
{
[_tableView setPullToRefreshHandler:^{
//从第一行数据开始下载
_offset=1;
[self startDownloadData];
}];
[_tableView setPullToLoadMoreHandler:^{
_offset+=_pageSize;
[self startDownloadData];
}];
}
//上拉或者下拉会调用下面方法
//开始加载数据
-(void)startDownloadData
{
NSString *urlSring=[NSString stringWithFormat:MAIN_SHOP_URL,_city,_category,_offset,_pageSize];
_request=[[LCHttpRequest alloc]init];
[_request requestUrl:urlSring target:self action:@selector(dealDownloadFinish:)];
}
//加载完成后,解析和处理数据
-(void)dealDownloadFinish:(LCHttpRequest *)request
{//解析XML
GDataXMLDocument *doc=[[GDataXMLDocument alloc]initWithData:request.data options:0 error:nil];
NSArray *list=[doc nodesForXPath:@"//promotion" error:nil];
if (_offset==1) {
NSLog(@"正在刷新数据");
[_allData removeAllObjects];
}
for (GDataXMLElement * promotion in list) {
PromotionModel *model=[[PromotionModel alloc]initWithGDataXMLElement:promotion];
[_allData addObject:model];
}
//结束刷新
[_tableView refreshFinished];
//结束加载更多
[_tableView loadMoreFinished];
[_tableView reloadData];
}
4、多使用第三方开源库实现: