这真是令人费解。我有一个NSXMLParser读取包含许多CDATA部分的文档。但我发现在程序的某些运行中,我在这种方法中收到的数据是错误的。它并不总是会发生,但是当它确实发生时,文档的其他随机部分通常有大约100个字符,它应该实际读取的部分之后。
简化,我有这个:
- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock {
NSString *queryFragment = [NSString stringWithUTF8String:[CDATABlock bytes]];
....
}
令人难以置信的是,在阅读同一文档的同一部分时,有时变量queryFragment正是我所期望的,但有时它最终会有随机垃圾。我曾经看过它读过CDATA块的末尾并获得原始XML!
我已经调试了两天了。任何想法都将深受赞赏。
答案 0 :(得分:1)
这是错误的,因为你期望一个带有stringWithUTF8String:
原始字节不是0终止
你必须使用数据:
NSString *queryFragment = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];