A Análise XML - NSXMLParserErrorDomain de erro 5
-
14-11-2019 - |
Pergunta
Eu estou tentando analisar um Arquivo XML.Funcionou muito bem até hoje...
Aqui está como eu começar a analisar o 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];
E aqui está como eu estou usando os dados recebidos:
- (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];
}
O Ficheiro XML funciona no meu navegador.E cada etiqueta é fechado.Não existem erros, mas eu nunca obter os dados do arquivo.
Espero que alguém possa ajudar.
mavrick3.
Solução
Você está (sabiamente) usando assíncrona url de conexão, mas isso significa que o seu didReceiveData representante será chamado várias vezes como os dados vem, então ela não será concluída no ponto que está a analisá-lo.
Você provavelmente quer mover a análise para o seguinte método de delegado.
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
EDITAR:
Sempre uma boa ideia formalmente validar o XML - eu tendem a usar o w3c ferramentas http://www.w3schools.com/xml/xml_validator.asp
Também, quando as coisas utilizado para trabalhar, parar de trabalhar, eu sempre me pergunto o que mudou?É o arquivo de diferente?É o maior?Tem certeza de que está presente no servidor e o navegador não esteja usando uma versão em cache?