NSXMLParser在&符号上扼流圈

时间:2009-11-12 00:42:27

标签: iphone objective-c cocoa nsxmlparser

我正在使用NSXMLParser解析一些HTML,并且只要遇到&符号就会遇到解析器错误。在解析它之前我可以过滤出&符号,但我宁愿解析那里的所有内容。

它给了我错误68,NSXMLParserNAMERequiredError:名称是必需的。

我最好的猜测是它是一个字符集问题。我对字符集的世界有点模糊,所以我认为我的无知正在咬我的屁股。 源HTML使用charset iso-8859-1,所以我使用此代码初始化Parser:

NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding] autorelease];
NSData *dataEncoded = [[dataString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES] autorelease];
NSXMLParser *theParser = [[NSXMLParser alloc] initWithData:dataEncoded];

有什么想法吗?

3 个答案:

答案 0 :(得分:7)

对于其他海报:当然XML无效......它是HTML!

您可能不应该尝试将NSXMLParser用于HTML,而是libxml2

如需仔细查看原因,请查看this article

答案 1 :(得分:2)

您确定您拥有有效的XML吗?你需要有像&amp ;;这样的特殊字符。转义后,您应该在原始XML文件中看到&

答案 2 :(得分:0)

通过NSString编码数据为我工作,无论如何你是自动释放一个没有被你自己分配的对象(dataUsingEncoding),所以它崩溃了,解决方案是:

NSString *dataString = [[NSString alloc] initWithData:data
                             encoding:NSISOLatin1StringEncoding];

NSData *dataEncoded = [dataString dataUsingEncoding:NSUTF8StringEncoding 
                                     allowLossyConversion:YES];

[dataString release];

NSXMLParser *theParser = [[NSXMLParser alloc] initWithData:dataEncoded];