iosネットワーク学習------8 xmlフォーマットデータの要求処理用コードブロックパッケージ
6971 ワード
#pragma mark xml
- (void)loadXML
{
// 。
NSLog(@"load xml");
// webserver
NSString *str = @"http://www.baidu.com?format=xml"; //
//1 NSURL
NSURL *url = [NSURL URLWithString:str];
//2 NSURLRequest
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0f];
//3 NSURLConnect
NSURLResponse *response = nil;
NSError *error = nil;
//
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
MyXMLParser *myParser = [[MyXMLParser alloc]init];
//
if (self.dataList == nil) {
self.dataList = [NSMutableArray array];
}else{
[self.dataList removeAllObjects];
}
//
[myParser xmlParserWithData:data StartName:@"video"
startElement:^( NSDictionary *dict) {
//1 currentvideo
self.currentVideo = [[Video alloc]init];
//2 videoid
self.currentVideo.videoId = [dict[@"videoId"]integerValue];
} endElement:^(NSString *elementName, NSString *result) {
if ([elementName isEqualToString:@"name"]) {
self.currentVideo.name = result;
}else if ([elementName isEqualToString:@"length"]){
self.currentVideo.length = [result integerValue];
}else if ([elementName isEqualToString:@"videoURL"]){
self.currentVideo.videoId = [result integerValue];
}else if ([elementName isEqualToString:@"imageURL"]){
self.currentVideo.imageURL = result;
}else if ([elementName isEqualToString:@"desc"]){
self.currentVideo.desc = result;
}else if ([elementName isEqualToString:@"teacher"]){
self.currentVideo.teacher = result;
}else if ([elementName isEqualToString:@"video"]){
[self.dataList addObject:self.currentVideo];
}
} finishedParser:^{
self.currentVideo = nil;
[self.tableView reloadData]; //
} errorParser:^{
NSLog(@" ");
//
self.currentVideo = nil;
//
[self.dataList removeAllObjects];
}];
}
<pre name="code" class="objc">#import <Foundation/Foundation.h>
// :
// 2 : elementname attributeDict
// 4 : elementname
//5
//6
// :
typedef void(^startElementBlock)(NSDictionary *dict);
typedef void(^endElementBlock)(NSString *elementName, NSString *result);
typedef void(^xmlParserNotificationBlock)();
@interface MyXMLParser : NSObject
//
/*
data xml
startname
startElement
endElement
finishedparser 。
errorParse 。
*/
-(void)xmlParserWithData:(NSData *)data
StartName:(NSString *)startName
startElement:(startElementBlock)startElement
endElement:(endElementBlock)endElement
finishedParser:(xmlParserNotificationBlock)finishedParser
errorParser:(xmlParserNotificationBlock)errorParser;
@end
<pre name="code" class="objc">#import "MyXMLParser.h" @interface MyXMLParser() <NSXMLParserDelegate> { // startElementBlock _startElementBlock; endElementBlock _endElementBlock; xmlParserNotificationBlock _finishedBlock; xmlParserNotificationBlock _errorBlock; } // , :video , @property (strong, nonatomic)NSString *startElementName; // @property (strong, nonatomic) NSMutableString *elementString; @end @implementation MyXMLParser // xml 。 /* data xml startname startElement endElement finishedparser 。 errorParse 。 */ - (void)xmlParserWithData:(NSData *)data StartName:(NSString *)startName startElement:(startElementBlock)startElement endElement:(endElementBlock)endElement finishedParser:(xmlParserNotificationBlock)finishedParser errorParser:(xmlParserNotificationBlock)errorParser { self.startElementName = startName; // _startElementBlock = startElement; _endElementBlock = endElement; _finishedBlock = finishedParser; _errorBlock = errorParser; // NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data]; [parser setDelegate:self]; // // [parser parse]; // 。 } #pragma mark - XML // , , 。 //1 , , 。 - (void)parserDidStartDocument:(NSXMLParser *)parser { // if (self.elementString == nil) { self.elementString = [NSMutableString string]; } } //2 ( video, , attributedict ) // // : elementName attributeDict - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:self.startElementName]) { // _startElementBlock(attributeDict); } // , [self.elementString setString:@""]; } //3 ( , ) - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { [self.elementString appendString:string]; } //4 , elementname , , // : elementname - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { NSString *result = [NSString stringWithString:self.elementString]; _endElementBlock(elementName, result); } //5 , 。 // : - (void)parserDidEndDocument:(NSXMLParser *)parser { [self.elementString setString:@""]; _finishedBlock(); } // , ( )。 // : 。 - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { NSLog(@" "); [self.elementString setString:@""]; // nserror 。 _errorBlock(); } @end