2014-02-03 3 views
0

я сделал пользовательский класс NSObject, который я использую для разбора страницы XML, там:как разобрать XML-файл, который я добавить в мой проект

#import "requestManager.h" 


@implementation requestManager 

-(id)initWithDelegate:(id<requestDelegate>)delegateObj{ 

    self = [super init]; 
    if (self){ 
     self.delegate = delegateObj; 
     self.contentData = [NSMutableData data]; 
     self.listOfPlaces = [NSMutableArray array]; 
    } 

    return self; 
} 


-(void)loadXmlData{ 


    NSURL *urlStr = [NSURL URLWithString:@"http://www.w3schools.com/xml/simple.xml"]; 
    NSURLRequest *req = [NSURLRequest requestWithURL:urlStr]; 


    NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self]; 
    [conn start]; 
} 

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 

    [self.contentData appendData:data]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 

    NSXMLParser *parserObj =[[NSXMLParser alloc] initWithData:self.contentData]; 
    parserObj.delegate = self; 
    [parserObj parse]; 

    NSLog(@"FINISHLOADING"); 
    [self.delegate didFinishParsingToDatabase:self.listOfPlaces]; 

} 

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ 

    NSLog(@"error!"); 
} 


-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString *)string{ 


    if (isName) [self.currentPosition setValue:string forKey:@"name"]; 
    if (isDescription) [self.currentPosition setValue:string forKey:@"description"]; 
    if (isLatitude) [self.currentPosition setValue:string forKey:@"latitude"]; 
    if (isLongitude) [self.currentPosition setValue:string forKey:@"longitude"];; 
    if (isWebPage) [self.currentPosition setValue:string forKey:@"webPage"]; 
    if (isImageCell) [self.currentPosition setValue:string forKey:@"imageCell"]; 
    if (isImageFirst) [self.currentPosition setValue:string forKey:@"imageFirst"]; 
    if (isImageSecond) [self.currentPosition setValue:string forKey:@"imageSecond"]; 
    if (isImageThird) [self.currentPosition setValue:string forKey:@"imageThird"]; 
    if (isImageFourth) [self.currentPosition setValue:string forKey:@"imageFourth"]; 


} 

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 

    if ([elementName isEqualToString:@"place"]){ 
     self.currentPosition = [NSMutableDictionary dictionary]; 
    } 

    if ([elementName isEqualToString:@"name"]) isName = YES; 
    if ([elementName isEqualToString:@"description"]) isDescription = YES; 
    if ([elementName isEqualToString:@"latitude"]) isLatitude = YES; 
    if ([elementName isEqualToString:@"longitude"]) isLongitude = YES; 
    if ([elementName isEqualToString:@"imageCell"]) isImageCell = YES; 
    if ([elementName isEqualToString:@"imageSecond"]) isImageSecond = YES; 
    if ([elementName isEqualToString:@"imageThird"]) isImageThird = YES; 
    if ([elementName isEqualToString:@"imageFourth"]) isImageFourth = YES; 
    if ([elementName isEqualToString:@"webpage"]) isWebPage = YES; 

} 


-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 



    if ([elementName isEqualToString:@"name"]) isName = NO; 
    if ([elementName isEqualToString:@"description"]) isDescription = NO; 
    if ([elementName isEqualToString:@"latitude"]) isLatitude = NO; 
    if ([elementName isEqualToString:@"longitude"]) isLongitude = NO; 
    if ([elementName isEqualToString:@"imageCell"]) isImageCell = NO; 
    if ([elementName isEqualToString:@"imageSecond"]) isImageSecond = NO; 
    if ([elementName isEqualToString:@"imageThird"]) isImageThird = NO; 
    if ([elementName isEqualToString:@"imageFourth"]) isImageFourth = NO; 
    if ([elementName isEqualToString:@"webpage"]) isWebPage = NO; 

    if ([elementName isEqualToString:@"place"]){ 
     // self.currentPosition = [NSMutableDictionary dictionary]; 
//  NSLog(@"%@", self.currentPosition); 
     [self.listOfPlaces addObject:self.currentPosition]; 
       NSLog(@"%@", self.listOfPlaces); 
    } 

} 


//-(void)parserDidEndDocument:(NSXMLParser *)parser{ 
//  
//  
//} 


@end 

Что я хочу, чтобы добавить файл XML в мой проект и разобрать его в автономном режиме. Как мне это реализовать? Должен ли я написать для него другой класс или изменить существующий?

Любой совет будет оценен, спасибо.

ответ

1

Вы в настоящее время имеют скачать вашего файла XML в сочетании с разборе из файла XML. Если вы отделите эти две функции, вы сможете либо загрузить его , либо загрузить его из своего пакета, а затем использовать тот же самый код для его анализа.

Посмотрите на свое подключениеDidFinishLoading method. Извлеките там методы и поместите их в свой класс, а затем вызовите этот класс. Сначала запустите его. (Это называется рефакторинг.)

Далее вы можете открыть XML-файл из своего Bundle, получить NSData, а затем вызвать класс, который вы только что создали.

Смежные вопросы