我正在开发一个需要从XML文件中获取数据的应用程序。有些节点有很多字符,我使用这个函数时遇到了问题:
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
例如,对于项目的描述节点,我将只获得20-30个最后一个字符,而我将获得200或300个。
我用NSLog检查了这个,看来问题来自这里。你知道什么是错的吗?
感谢您的任何建议。
答案 0 :(得分:2)
SAX解析器不保证一次获取所有字符。您可以使用任何给定块中的字符块进行多次调用;你的代码应该将它们连接成一个字符串。
解析器对象可以向委托发送几个解析器:foundCharacters:消息来报告元素的字符。因为字符串可能只是当前元素的总字符内容的一部分,所以应该将其附加到当前字符的累积中,直到元素发生变化。
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
if ([qualifiedName isEqualToString:@"myTag"]) {
buf = [NSMutableString string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([qualifiedName isEqualToString:@"myTag"]) {
buf = [buf stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"Got %@", buf);
}
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
[buf appendString:string];
}