需要帮助使用NSXMLParser和ASIHTTPRequest

时间:2011-07-04 23:32:04

标签: ios nsxmlparser asihttprequest

我目前正在尝试解析我从我的服务器上的php脚本返回的xml的字符串表示形式,该表单传递给ASIHTTPRequest方法 * - (void)requestFinished:(ASIHTTPRequest )请求

我想使用NSXMLParser来解析这个xml,到目前为止,我已经完成了所有操作,请查看我是如何做到这一点的代码,但我遇到的问题是它似乎正在访问* - (void )解析器:(NSXMLParser *)解析器foundCharacters :( NSString )string {方法多次..当我只想让它一次访问它并返回值。关于为什么会发生这种情况的任何想法都将受到高度赞赏。

- (void)requestFinished:(ASIHTTPRequest *)request
{
    // Use when fetching text
    NSString *responseString = [request responseString];
    NSData *xData = [responseString dataUsingEncoding:NSUTF8StringEncoding];
    //myCode.text = responseString;
    //NSLog(@" response %@", responseString);

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xData];

    [parser setDelegate:self];
    [parser parse];
    [parser release];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
    if ([elementName isEqual:@"code"]) {
        NSLog(@"Found title!");
        titleString = [[NSMutableString alloc] init];
    }
}


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    [titleString appendString:string];
    NSLog(@"the code string =%@", titleString);

}

// EDITTED :::::

我忘了添加这个最后被调用的委托方法,并输出最终结果。我之所以说它不起作用的原因是因为我在方法名称中写了一些错误....所有修复现在都完美无缺。

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    if ([elementName isEqual:@"code"]) {
        //NSLog(@"ended title: %@", titleString);
        //Pass  code over to animation
        [self parseCodeForAnimation:titleString];

        [titleString release];
        titleString = nil;
    }   

}

1 个答案:

答案 0 :(得分:1)

通常,SAX解析器多次调用foundCharacters方法,这在很大程度上取决于要解析的数据的内容。您所能做的就是以正确处理此问题的方式对您的应用进行编码。通常,您可以通过保留类似NSMutableData或NSMutableString的内容来执行此操作,并在每次调用foundCharacters时附加到它。当您收到一个结束标记,表示不再有数据作为该元素的一部分发送时,您将可变内容转储到字符串中,存储它,并为下一组数据重置缓冲区。