NSXMLParser 扼流圈 &

NSXMLParser chokes on ampersand &

提问人:Silromen 提问时间:11/12/2009 更新时间:11/20/2012 访问量:4211

问:

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

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

我最好的猜测是这是一个字符集问题。我对角色集的世界有点模糊,所以我认为我的无知正在咬我的屁股。 源 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];

有什么想法吗?

iPhone Objective-C NSXML解析器

评论

2赞 bobince 11/12/2009
您正在使用 XML 解析器解析 HTML?这怎么行得通?(除非它是格式正确的 XHTML 并且不使用 HTML 实体集。无论哪种方式,裸露的 & 符号在 HTML 和 XML 中都是无效的,因此您需要为现实世界的破碎 HTML 寻找解析器,这比 XML 解析要困难得多。

答:

2赞 Kendall Helmstetter Gelner 11/12/2009 #1

您确定具有有效的 XML 吗?您需要在原始XML文件中看到特殊字符,例如& escaped&

7赞 Benjamin Cox 11/12/2009 #2

致其他发帖人:当然,XML是无效的......这是HTML!

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

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

评论

0赞 Silromen 11/12/2009
好吧,那么。错误的工作工具?谢谢你的提示。我可能不得不这样做。
1赞 Epsilon Prime 11/12/2009
关于 HTML 的好点,NSXMLParser 部分让我失望了。 libxml2 似乎是一个非常合理的选择。请参阅之前的 SO 文章:stackoverflow.com/questions/405749/parsing-html-on-the-iphone
0赞 Jerome 11/2/2012 #3

通过对我有用的方式对数据进行编码,反正你正在自动释放一个不是自己分配的对象(dataUsingEncoding),所以它崩溃了,解决方案是:NSString

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

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

[dataString release];

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

评论

0赞 kleopatra 11/2/2012
请编辑您的答案并格式化代码(按原样不可读)