Não é possível ler o arquivo XML
-
22-09-2019 - |
Pergunta
Tenho um pequeno problema ao receber o conteúdo de um arquivo XML (usando o Touchxml).
Minha primeira consulta funciona muito bem, parece algo assim:
NSString *url = [NSString stringWithFormat:STATION_ID, latitude, longtitude];
CXMLDocument *rssParser = [[CXMLDocument alloc] initWithContentsOfURL:[NSURL URLWithString:url] options:0 error:nil];
NSLog(@"%@",rssParser);
Portanto, este log me dá o arquivo XML completo.
Depois disso, em outro método, estou tentando o mesmo:
NSString *url = [NSString stringWithFormat:WEATHER_URL, [positionInformation objectForKey:@"stationId"]];
CXMLDocument *rssParser = [[CXMLDocument alloc] initWithContentsOfURL:[NSURL URLWithString:url] options:0 error:nil];
NSLog(@"%@", rssParser);
Mas o log que estou recebendo é (nulo). Loggin the URL String me dá o URL certo sem espaços ou algo assim, o log de URL, por exemplo, se parece com o seguinte:
NSString *url = [NSString stringWithFormat:WEATHER_URL, [positionInformation objectForKey:@"stationId"]];
NSLog(@"%@", url);
O resultado no console do depurador é
http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=KCASUNNY19
Olhar para este arquivo com meu navegador parece estar bem. Alguém sabe o que está errado ?????
Eu também tentei, primeiro para obter o conteúdo deste URL pela StringWithContentsOfurl, mas isso também não funcionou.
Solução
Esse cara estava tendo o mesmo problema: http://www.iphonedevsdk.com/forum/iphone-sdk-development/15963-problem-initwithcontentsofurl.html. Parece que a API no Weather Underground está esperando um agente do usuário e retornando uma resposta de 500 HTTP quando não vê um. Você pode usar -initWithData:options:error:
no cxmldocument para passar os dados que você obtém usando nsmutableurlRequest.
Outras dicas
Você deve tentar usar o argumento de erro do initWithContentsOfurl: Opções: Erro:. Crie um objeto NSerror *e passe -o assim:
NSError *error;
CXMLDocument *rssParser = [[CXMLDocument alloc] initWithContentsOfURL:[NSURL URLWithString:url] options:0 error: &error];
Se você não receber um objeto RSSParser, verifique esse erro.
Copiei o conteúdo desse arquivo XML para o meu próprio servidor e mudei o caminho da URL. Isso funciona correto, então acho que há um problema em ler este arquivo ".asp".
Hmm. Mas seu conteúdo XML, estranho.
// EDIT: Fiz um pequeno arquivo PHP no meu servidor que retorna o conteúdo do arquivo "ASP":
<?php
echo file_get_contents("http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=KCASANFR70");
?>
Ler o conteúdo do meu script funciona, mas essa solução alternativa não é o que eu quero.
oh maldito =/
Tem certeza de que sua sequência de URL está codificada corretamente, para que o ponto de interrogação seja interpretado como uma consulta? Você pode querer olhar para usar dataUsingEncoding
ou stringUsingEncoding
no seu URL antes de usá -lo para inicializar rssReader
.