2011-12-11 81 views
0

我正在通過API下載谷歌天氣。我在解析時遇到問題。iPhone:麻煩解析谷歌天氣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); 

}` 

不返回任何東西。我認爲這解析了元素的內容

幫助讚賞。

+0

** Google天氣API在2012年被關閉** - > http://stackoverflow.com/questions/12145820/google-weather-api-gone/35943521 –

回答

0

事實證明,解析器會自動創建「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"]]; 
}