2012-02-27 143 views
0

我有一個iOS應用程序。所有數據存儲在xml文件中。無法用NSXMLParser解析XML

<?xml version="1.0" encoding="utf-8"?> 
<objects> 
    <object 
     name="Скульптура Р. Исмагилова «Пермяк – соленые уши»" 
     xcoord="58.00998487478568" 
     ycoord="56.239829063415527" 
     type="" 
     description="" 
     external_name="gl1" /> 
</objects> 

所以,我想這個XML文件解析到NSMutableArray

NSXMLParser deleagate類做到這一點。這是類代碼:

@implementation XMLParser 

@synthesize aPLace; 

- (XMLParser *) initXMLParser { 

    [super init]; 

    appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate]; 

    return self; 
} 

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

    NSLog(@"parsing"); 

    if([elementName isEqualToString:@"objects"]) { 
     //Initialize the array. 
     appDelegate.books = [[NSMutableArray alloc] init]; 
    } 
    else if([elementName isEqualToString:@"object"]) { 

     //Initialize the book. 
     aPLace = [[Place alloc] init]; 

     //Extract the attribute here. 
     aPLace.name = [[attributeDict objectForKey:@"name"] string]; 

     NSLog(@"Reading name :%@", aPLace.name); 
    } 
} 

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

} 

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

    if([elementName isEqualToString:@"objects"]) 
     return; 

    if([elementName isEqualToString:@"object"]) { 
     [appDelegate.greenLine addObject:aPLace]; 
    } 

} 

@end 

你可以看到,有在didStartElement功能NSLog(@"parsing");。但輸出是空的。

所以,我實現了在解析功能AppDelegateClass'sapplicationDidFinishLaunching

- (void)applicationDidFinishLaunching:(UIApplication *)application { 


    NSURL *url = [[NSURL alloc] initWithString:@"greenline_ru.xml"]; 
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 

    //Initialize the delegate. 
    XMLParser *parser = [[XMLParser alloc] initXMLParser]; 

    //Set delegate 
    [xmlParser setDelegate:parser]; 

    //Start parsing the XML file. 
    BOOL success = [xmlParser parse]; 

    if(success) 
     NSLog(@"No Errors"); 
    else 
     NSLog(@"Error Error Error!!!"); 

    // Configure and show the window 
    [window addSubview:[navigationController view]]; 
    [window makeKeyAndVisible]; 
} 

,每次輸出Error Error Error!!!爲什麼呢?有什麼問題?

回答

2
NSURL *url = [[NSURL alloc] initWithString:@"greenline_ru.xml"]; 

我覺得這是你的問題。如果你有檔案,你應該使用類似

NSString *path = [[NSBundle mainBundle] pathForResource:@"greenline_ru" 
               ofType:@"xml"]; 
[[NSXMLParser alloc] initWithData:[NSData dataWithContentsOfFile:path]]