如何将 Web 服务数据解析为 NSString?

How to parse web service data into NSString?

提问人:Anand - 提问时间:4/29/2015 最后编辑:fluffyAnand - 更新时间:4/29/2015 访问量:109

问:

我在解析来自 Web 服务响应的数据时遇到了问题。 我调用一个 Web 服务并得到 的响应,但我需要将数据捕获为 。NSLogNSString

这是我的示例代码:

-(void)connection:(NSURLConnection *) connection didReceiveResponse:   (NSURLResponse *) response {

}

-(void)connection:(NSURLConnection *) connection didReceiveData:(NSData *) data {
    NSString *strData;
    strData = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

    NSXMLParser   *xmlParser = [[NSXMLParser alloc] initWithData:data];
    [xmlParser setDelegate:self];
    [xmlParser parse];

    soapResultsString=[[NSMutableString alloc]init];

    recordResults =YES;
}

 NSString *xmlparserString;
 NSMutableString *soapResultsString;
 bool recordResults;

-(void)parserDidEndDocument:(NSXMLParser *)parser
{
}

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

    if( [xmlparserString isEqualToString:@"ns:return"])
    {
        recordResults =YES;
        soapResultsString = [[NSMutableString alloc] init];
    }
}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    if( recordResults )
    {
        [soapResultsString appendString: string];
        NSLog(@"inside%@",string);
    }

}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if( [elementName isEqualToString:@"ns:return"])
    {
        NSLog(@"parser==>%@",parser);
        NSLog(@"nameSpaceUrL==>%@",namespaceURI);
        NSLog(@"qName==>%@",qName);

        NSData *data = [soapResultsString dataUsingEncoding:NSUTF8StringEncoding];
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    //   NSLog(@"json==>%@",json);

        NSArray *planArray = [json objectForKey:@"hello_History"];

        NSLog(@"planArrayCount==>%lu",(unsigned long)[planArray count]);
        NSMutableArray *dataSource = [NSMutableArray arrayWithCapacity:planArray.count];
        for (int i = 0 ; i<[planArray count]; i++)
        { 
            recordResults = NO;

            txn_id=[[[json valueForKey:@"hello_History"]valueForKey:@"date"]objectAtIndex:i];

            loginId = [[[json valueForKey:@"hello_History"]valueForKey:@"time"]objectAtIndex:i];

        }
    }
}

问题是我得到这个方法的输出

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

但我的解析方法没有调用

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

是否有任何替代方法可以捕获字符串

iOS Objective-C iPhone XML解析

评论

0赞 Viral Savaj 4/29/2015
你已经发布了,代码,非常好,但你真正想要的,1。单个字符串中的完整响应?2.从方法中的标签中获取完整的字符串?3. 还有别的吗?XMLdidEndElement
0赞 Anand - 4/29/2015
我在单个字符串中得到了完整的响应。2)我需要didEndElement方法中XML标签的完整字符串,我无法解析didEndElement中的字符串,并且更多在didEndElement上没有全部调用我通过断点检查是否有任何替代方法r步骤
0赞 Viral Savaj 4/29/2015
您可以通过比较 .当此条件为真时,您将获得来自xmlparserString didEndElementelementNamexmlparserStringsoapResultsString
0赞 Anand - 4/29/2015
我同意你的答案,但我的函数运行到 -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 之后,我的函数没有调用didEndElement方法
0赞 Viral Savaj 4/29/2015
你能发布你的XML字符串响应或其中的一部分吗?

答: 暂无答案