的NSXMLParser问题:没有得到所有的数据?(NSXMLParser issue : don&

2019-09-29 01:22发布

我正在开发一个需要从一个XML文件中获取数据的应用程序。 某些节点有很多字,我已经使用这个功能相关的问题:

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

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

我用的NSLog检查了这一点,它出现的问题来自于这里。 你知道什么是错的?

感谢您的任何意见。

Answer 1:

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


文章来源: NSXMLParser issue : don't get all data?