2011-03-30 3 views
0

XML 파일을 구문 분석하려고합니다. 그것은 매우 잘 작동 - 오늘까지 ... 여기 XML 구문 분석 - NSXMLParserErrorDomain 오류 5

내가 XML 파싱을 시작하는 방법은 다음과 같습니다

- (void)connection:(NSURLConnection *)theConnection 
    didReceiveData:(NSData *)incrementalData 
{ 
    if (data == nil) 
     data = [[NSMutableData alloc] init]; 

    [data appendData:incrementalData]; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",actual]]; 

    NSError *parseError = nil; 
    NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLString:[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] error:&parseError]; 

    if (parseError != nil) { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:[parseError localizedDescription] delegate:nil cancelButtonTitle:@"Zurück" otherButtonTitles:nil]; 
     [alert show]; 
     [alert release]; 
    } //shows an alertview with NSXMLParserErrorDomain error 5 

    NSLog(@"String: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); //returns null 

    NSLog(@"Dictionary: %@",xmlDictionary); //returns null 

    NSMutableDictionary *tempDictForAddDate = [[NSMutableDictionary alloc] initWithDictionary:xmlDictionary]; 

    NSDateFormatter *originalDate = [[NSDateFormatter alloc] init]; 
    [originalDate setDateFormat:@"dd.MM.yyyy"]; 

    NSString *today = [originalDate stringFromDate:[NSDate date]]; 

    [tempDictForAddDate setObject:today forKey:@"updated"]; 

    [tempDictForAddDate writeToFile:filePath atomically:YES]; 

    self.contentList = [[tempDictForAddDate objectForKey:@"xmlObject"] objectForKey:@"event"]; 

    [self sortContent]; 
} 

는 XML : I는 수신 된 데이터를 사용하고 어떻게

NSString *link = [[NSString alloc] init]; 
link = @"link_to_xml_file"; 

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:link] 
              cachePolicy:NSURLRequestReturnCacheDataElseLoad 
             timeoutInterval:30.0]; 

connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

을 그리고 여기에 - 파일이 내 브라우저에서 작동합니다. 모든 태그가 닫힙니다. 오류는 없지만 파일의 데이터는 절대 가져 오지 않습니다.

누군가 도와 드릴 수 있기를 바랍니다.

mavrick3.

답변

1

비동기 url 연결을 사용하면 (현명하게) 데이터가 들어올 때마다 didReceiveData 대리인이 여러 번 호출되므로 구문 분석 할 시점에 완료되지는 않습니다.

아마도 다음과 같은 위임 메서드로 구문 분석을 이동하려고 할 수 있습니다.

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

는 참조 Apple's Documentation here

편집 : 항상

공식적 XML의 유효성을 확인하는 것이 좋습니다 - 나는 W3C 도구를 사용하는 일을 정지 작업 http://www.w3schools.com/xml/xml_validator.asp 또한

을 사용하는 경향이 일하다, 나는 항상 변화 한 것을 스스로에게 묻는다. 파일이 다른가요? 더 큰가요? 서버에 브라우저가 있고 캐시 된 버전을 사용하고 있지 않습니까?

+0

하지만 오늘은 일했습니다 ... 나는 connectionDidFinishLoading에 구문 분석 코드를 던져 버렸습니다. 여전히 작동하지 않습니다. 물론, 나는 내 코드의 어떤 것도 변경하지 않았고, 명령을 실행했다. 어떻게해야합니까? –

+0

좋아, 그래서 파일의 크기가 처음으로 보낸 데이터의 양보다 작았 기 때문에 나는 그것이 효과가 있다고 생각합니다. 올바른 위치로 이동하는 것이 좋습니다. 나는 다른 생각을 할 것이다 ... – Roger

+0

이유 때문에 증분 데이터라고 부른다. 귀하의 응답은 아마도 오늘까지 작았습니다. 매번'- (void) connection : (NSURLConnection *) theConnection didReceiveData : (NSData *) incrementalData'가 호출 될 때마다 incrementalData를 NSMutableData 객체에 추가해야합니다. 나머지 코드는'- (void) connectionDidFinishLoading : (NSURLConnection *) connection'으로 이동해야합니다. – Joe