2012-06-25 191 views
0

我想使用Web服務並從服務中獲取數據。我能夠發送請求並接收數據,但幫助我解析它。繼承我的代碼。我想解析XML響應,並將其存儲陣列中進一步使用解析XML響應Xcode

-(void)performSearch:(NSString *)searchText 
{ 
    NSString *param = [NSString stringWithFormat:@"ZIP=%@", 
         searchText]; 

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://wsf.cdyne.com/WeatherWS/Weather.asmx/GetCityForecastByZIP?%@", param]]; 

    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setRequestMethod:@"GET"]; 

    [request addRequestHeader:@"Content-Type" value:@"application/x-www-form-urlencoded"]; 

    NSLog(@"%@",param); 

    NSLog(@"%@",url); 


    NSLog(@"%@",request); 
    [request setDelegate:self]; 
    [request startAsynchronous]; 

    } 
- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    NSData *response = [request responseData]; 

    NSLog(@"%@",response); 
help me how to parse the data and store it in array 
    //NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:response]; 


    } 

回答

1

有很多很好的教程學習如何正確地解析XML,這裏有一個匆匆:

在.H

@interface ObjectName : ObjectSuperclass <NSXMLParserDelegate> { 
    NSMutableString *currentElement; 
    NSMutableString *childElement; 
    NSMutableDictionary *array; 
    NSXMLParser *parser; 
} 

@end 

在的.m:

-(void)parseWithData:(NSData *)data { 
    parser = [[NSXMLParser alloc] initWithData:data]; 
    [parser setDelegate:self]; 
    //You might want to consider additional params like: 
    [parser setShouldProcessNamespaces:NO]; 
    [parser setShouldReportNamespacePrefixes:NO]; 
    [parser setShouldResolveExternalEntities:NO]; 
    //And then finally (which activates the delegates): 
    [parser parse]; 
} 

再次在.M,插入這些的NSXMLParser代表我thods:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{  
    currentElement = nil; 
    currentElement = [elementName copy]; 
    if ([elementName isEqualToString:@"xmlParentElement"]) { 
    //This means the parser has entered the XML parent element named: xmlParentElement 
    //All of the child elements that need to be stored in the array should have their own IVARs and declarations. 
    childElement = [[NSMutableString alloc] init]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
    //For all child elements, run this if statement. 
    if (currentElement isEqualToString:@"childElement") { 
    [childElement appendString:string]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 
    if ([elementName isEqualToString:@"xmlParentElement"]) { 
    [array addObject:childElement]; 
    } 
} 

隨意評論,如果事情不清楚!

+0

當我運行代碼時,我的代碼沒有跳入parsewithdata方法 – Kashyap

+0

我能夠使用NSLog查看數據我是新的目標C並閱讀了很多教程,但無法弄清楚我在做什麼的錯誤 – Kashyap

+0

hey Eli Gregory它通過XML解析但無法找到XML的開始我做什麼它返回空即沒有 – Kashyap