Синтаксический анализ XML - ошибка NSXMLParserErrorDomain 5 - PullRequest
0 голосов
/ 30 марта 2011

Я пытаюсь разобрать файл XML. Это работало очень хорошо - до сегодняшнего дня ...

Вот как я начинаю анализировать XML:

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];

А вот как я использую полученные данные:

- (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-файл работает в моем браузере. И каждый тег закрыт. Там нет никаких ошибок, но я никогда не получаю данные файла.

Я надеюсь, что кто-то может помочь.

mavrick3.

1 Ответ

1 голос
/ 30 марта 2011

Вы (разумно) используете асинхронное URL-соединение, но это означает, что ваш делегат didReceiveData будет вызываться несколько раз при поступлении данных, поэтому он не будет завершен в тот момент, когда вы его анализируете.

Возможно, вы захотите перенести разбор в следующий метод делегата.

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

См. Документация Apple здесь

EDIT:

Всегда хорошая идея для формальной проверки вашего XML - я склонен использовать инструменты w3c http://www.w3schools.com/xml/xml_validator.asp

Кроме того, когда перестали работать вещи, которые раньше работали, я всегда спрашиваю себя, что изменилось? Файл отличается? Это больше? Вы уверены, что он присутствует на сервере, и ваш браузер не использует кэшированную версию?

...