1

我正在开发一个需要从 XML 文件中获取数据的应用程序。一些节点有很多字符,我在使用这个函数时遇到了问题:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

例如,对于一个项目的描述节点,我只会得到 20-30 个最后的字符,而我会得到 200 或 300 个。

我用 NSLog 检查了这一点,看来问题来自这里。你知道出了什么问题吗?

感谢您的任何建议。

4

1 回答 1

2

SAX 解析器不保证一次获取所有字符。您可能会收到来自任何给定块的字符块的多次调用;您的代码应该将它们连接成一个字符串。

解析器对象可以向委托发送几个 parser: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];
}
于 2012-05-27T22:02:02.230 回答