我做了一个自定义的 NSObject 类,我用它来解析 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 文件添加到我的项目中并离线解析它。我应该如何实现?我应该为它编写另一个类,还是修改现有的?
如有任何建议,我们将不胜感激。
最佳答案
您目前可以下载您的 XML 文件,并解析您的 XML 文件。如果您将这两个函数分开,那么您将能够下载它或从您的 Bundle 加载它,然后使用完全相同的代码来解析它。
查看您的 connectionDidFinishLoading 方法。提取那里的方法并将它们放在它们自己的类中,然后调用该类。先让它工作。 (这称为重构。)
接下来您可以从您的 Bundle 打开一个 XML 文件,从中获取 NSData,然后调用您刚刚创建的类。
关于ios - 如何解析我添加到项目中的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21534348/