開發(fā)中如果通過網(wǎng)絡(luò)請(qǐng)求赶站,接收服務(wù)器返回的是XML數(shù)據(jù),需要將XML數(shù)據(jù)解析动羽。
首先AFN需要加載一下XML解析器,然后做網(wǎng)絡(luò)請(qǐng)求渔期,把參數(shù)傳進(jìn)去运吓,然后我們獲取到的responseObject是NSXMLParser類型。
接著我們需要解析NSXMLParser數(shù)據(jù)疯趟,我們要設(shè)置NSXMLParserDelegate代理拘哨,開始解析。通過elementName來傳輸數(shù)據(jù)信峻,目的是在- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 中做處理獲取倦青。
代碼示意:
1、整個(gè)AFN的網(wǎng)絡(luò)請(qǐng)求代碼
- (void)loadData
{
// TEST URL
NSDictionary *params = [self generateRequestParams];
NSString *url = @"http://localhost:5000/?user_id=858&token=C9F";
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
// XML形式解析服務(wù)器
mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];
[mgr GET:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// XMLParser
// 1.根據(jù)需要解析的XML數(shù)據(jù), 創(chuàng)建NSXMLParser對(duì)象(這里直接將responseObject賦值)
NSXMLParser *parser = responseObject;
// 2.設(shè)置代理, 通過代理方法告訴NSXMLParser, 需要獲取哪些元素和哪些屬性
parser.delegate = self;
// 3.開始解析
[parser parse];
self.draftBillTableView.bills = self.bills;
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[MBProgressHUD showError:@"網(wǎng)絡(luò)錯(cuò)誤"];
}];
}
2盹舞、XML 的解析過程
#pragma mark - NSXMLParserDelegate
#pragma mark - 開始解析
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
self.currentElement = elementName;
if([self.currentElement isEqualToString:@"data"]){
self.bill = [[CZBill alloc] init];
}
}
#pragma mark - 獲取節(jié)點(diǎn)內(nèi)容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if([self.currentElement isEqualToString:@"type"])
self.bill.type = [string intValue];
else if([self.currentElement isEqualToString:@"date"])
self.bill.date = [self stringToDate:string];
else if([self.currentElement isEqualToString:@"money"])
self.bill.money = string;
else
return;
}
#pragma mark - 結(jié)束解析
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"data"]) {
[self.bills addObject:self.bill];
}
self.currentElement = nil;
[self.draftBillTableView reloadData];
}
3产镐、解析數(shù)據(jù)如下:
<data>
<type>0</type>
<money>5000</money>
<date>1995-03-16 11:08</date>
</data>
轉(zhuǎn)自:http://blog.csdn.net/jianloubang5433/article/details/52886613?locationNum=4&fps=1