Ios 需要使用NSXMLParser和ASIHTTPRequest的帮助吗

Ios 需要使用NSXMLParser和ASIHTTPRequest的帮助吗,ios,nsxmlparser,asihttprequest,Ios,Nsxmlparser,Asihttprequest,我目前正试图解析从服务器上的php脚本返回的xml的字符串表示形式,该脚本被传递给ASIHTTPRequest方法 *-(void)requestFinished:(ASIHTTPRequest)请求 我想使用NSXMLParser来解析这个xml,到目前为止,我已经准备好了所有的东西,请看我是如何做到这一点的代码,但是我遇到的问题是,它似乎正在访问*-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString)string{metho

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

我想使用NSXMLParser来解析这个xml,到目前为止,我已经准备好了所有的东西,请看我是如何做到这一点的代码,但是我遇到的问题是,它似乎正在访问*-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString)string{method多次..当我只想让它访问一次并返回值时。任何关于为什么会发生这种情况的想法都将不胜感激

- (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);

}
//编辑:

我忘了添加这个委托方法,它是最后一个被调用的方法,并将输出最终结果。我说它不起作用的原因是因为我在方法名称中写了一些错误…现在都修复了,并且工作得很好

- (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;
    }   

}

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

是的,我明白您的意思。伙计,ars中这样编码是多么痛苦啊……我甚至不确定这是否有效因为一旦我有了代码,我需要将它传递给另一个方法,该方法将为响应设置动画。唯一的原因是parser:foundCharacters:执行三次,这将导致错误…我想我刚刚发现我做错了什么…我没有使用parser:namespaceURI:qualifiedName:委托方法..从这里我可以将值传递给我的动画方法…但是由于某些原因,我无法调用此方法..将继续尝试通过此方法。