3

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

它给了我错误 68,NSXMLParserNAMERequiredError: Name is required。

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

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

有任何想法吗?

4

3 回答 3

7

对其他发帖人:XML 当然是无效的……它是 HTML!

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

要详细了解原因,请查看这篇文章

于 2009-11-12T00:53:27.227 回答
2

你确定你有有效的 XML 吗?您需要在原始 XML 文件中使用特殊字符(如 & 转义),您应该会看到&

于 2009-11-12T00:47:33.897 回答
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];
于 2012-11-02T15:37:37.623 回答