2011-12-03 5 views
1

아래 코드를 사용하여 다운로드 한 파일을 구문 분석했습니다. 이전에 내 Mac을 다시 시작하기 전에 이전에 제대로 작동했지만 이전에는 데이터를 다운로드해야하는 동안 XML을 파싱하지 못했습니다. 정확히.XML을 파싱하지 못했습니다

-(IBAction)loginButton:(id)sender{ 

    NSString *user = [userNameField text]; 

    NSString *passwd = [passwordField text]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    [defaults setObject:user forKey:@"Username"]; 

    [defaults setObject:passwd forKey:@"Password"]; 

    [defaults synchronize]; 

    NSLog(@"Data Saved"); 

    NSString *urlAsString = @"http"; 

    NSURL *url = [NSURL URLWithString:urlAsString]; 

    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url]; 

    [urlRequest setTimeoutInterval:30.0f]; 

    [urlRequest setHTTPMethod:@"POST"]; 

    NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 

    [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response,NSData *data, NSError *error) { 

     if ([data length] >0 && error == nil){ 

      NSString *html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

      NSLog(@"HTML = %@", html); 

     } 
     else if ([data length] == 0 && error == nil){ 
      NSLog(@"Nothing was downloaded."); 

     } 

     else if (error != nil){ 
      NSLog(@"Error happened = %@", error); 
     } }]; 


    NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"xml"]; 

    NSData *xml = [[NSData alloc] initWithContentsOfFile:xmlFilePath]; 

    self.xmlParser = [[NSXMLParser alloc] initWithData:xml]; 

    self.xmlParser.delegate = self; 

    if ([self.xmlParser parse]) { 

     NSLog(@"The XML is parsed"); 

    }else{ 

     NSLog(@"Failed to parse the XML"); 
    } 
} 

-(void)parserDidStartDocument:(NSXMLParser *)parser { 

    self.rootElement = nil; 
    self.currentElementPointer = nil; } 

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

    if (self.rootElement == nil){ 
     self.rootElement = [[XMLElement alloc] init]; self.currentElementPointer = self.rootElement; 
    } else { 
     XMLElement *newElement = [[XMLElement alloc] init]; newElement.parent = self.currentElementPointer; [self.currentElementPointer.subElements addObject:newElement]; self.currentElementPointer = newElement; 
    } 
    self.currentElementPointer.name = elementName; self.currentElementPointer.attributes = attributeDict; 

    NSString *user = [NSString stringWithFormat:@"%@", [attributeDict objectForKey:@"user"]]; 

    NSLog(@"User: %@", user); 

    if ([user isEqualToString:@"1"]) { 
     NSLog(@"Test succeeded!"); 
    }  
} 

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

    if ([self.currentElementPointer.text length] > 0){ 
     self.currentElementPointer.text = 
     [self.currentElementPointer.text stringByAppendingString:string]; 
    } else { 
     self.currentElementPointer.text = string; } 
} 

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

    self.currentElementPointer = self.currentElementPointer.parent; 

} 

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

    self.currentElementPointer = nil; 
} 

답변

2

XML을 구문 분석하지 못한 경우 정확하게 오류가있는 위치를 확인하려면 -(NSError *)parseError을 확인해야합니다.

NSLog(@"Parse Error: %@", [self.xmlParser parseError]); 

이 귀하의 질문에 직접 대답은 아니지만 실제로 한 (?를) 요청하지 않은 나는이 곳이 아닌 다른부터 시작 해야할지하지 않을 것입니다.

+0

고맙습니다. 문제가 해결되었습니다 :) – AppDeveloper

관련 문제