2012-06-25 44 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