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