提问人:Silromen 提问时间:11/12/2009 更新时间:11/20/2012 访问量:4211
NSXMLParser 扼流圈 &
NSXMLParser chokes on ampersand &
问:
我正在使用 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];
有什么想法吗?
答:
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
请编辑您的答案并格式化代码(按原样不可读)
评论