iPhone: проблема с анализом API погоды Google - PullRequest
0 голосов
/ 11 декабря 2011

Я загружаю погоду Google через API.У меня проблемы с анализом.

Используя NSXMLParserDelegate, он находит элемент «Forecast_Conditions», но я не могу извлечь его содержимое.Парсеры, кажется, думают, что «высокий» и «низкий» и т. Д. Являются отдельными элементами.

Я пытаюсь разобрать этот элемент:

<forecast_conditions><day_of_week data="Sun"/><low data="20"/><high data="38"/><icon data="/ig/images/weather/sunny.gif"/><condition data="Clear"/></forecast_conditions>

Я удивлен ...

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

 NSLog(@"foundCharacters string: %@",string);

}`

тоже ничего не возвращает.Я думал, что это проанализировало содержимое элемента

Помощь оценена.

1 Ответ

0 голосов
/ 16 декабря 2011

Оказывается, парсер автоматически создает словарь "attributeDict".Для циклического перемещения по elementNames вам нужно всего лишь вызвать [attributeDict objectForKey: @ "data"].Пример ниже.

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

// current conditions

if ([elementName isEqualToString:@"current_conditions"]) {

     currentConditions = [[NSMutableString alloc] init];
     temp_f = [[NSMutableString alloc] init];
     temp_c = [[NSMutableString alloc] init];
     humidity = [[NSMutableString alloc] init];
     currentIcon = [[NSMutableString alloc] init];
     wind_condition = [[NSMutableString alloc] init];

}

if ([elementName isEqualToString:@"condition"]) {
    [currentConditions appendString:[attributeDict objectForKey:@"data"]];
}
if ([elementName isEqualToString:@"temp_f"]) {
    [temp_f appendString:[attributeDict objectForKey:@"data"]];
}
if ([elementName isEqualToString:@"temp_c"]) {
    [temp_c appendString:[attributeDict objectForKey:@"data"]];
}
if ([elementName isEqualToString:@"humidity"]) {
    [humidity appendString:[attributeDict objectForKey:@"data"]];
}
if ([elementName isEqualToString:@"currentIcon"]) {
    [currentIcon appendString:[attributeDict objectForKey:@"data"]];
}
if ([elementName isEqualToString:@"wind_condition"]) {
    [wind_condition appendString:[attributeDict objectForKey:@"data"]];
}
...