我一直在研究一个使用 libxml2 HTMLParser 模块在 iOS 上解析网页 HTML 的项目。每当我尝试解析包含以下行的网页时,我都会从 libxml2 的 htmlParseDocument 中收到 EXC_BAD_ACCESS 错误:
<?xml version="1.0" encoding="UTF-8"?>
如果我从 HTML 中去掉这一行,解析就完美了。
另请注意,我使用 DTHTMLParser 类将 libxml2 SAX 回调绑定到 Objective-C 代码。
由于 htmlParseDocument 中的 EXC_BAD_ACCESS 并没有太多的工作要做,因此我构建了一个示例 Xcode 项目来重现该错误。我在针对 iOS 5.1 的 Mountain Lion 上的 Xcode 4.4 中制作了它。首先,它解析一个不包含违规行的 HTML 文件,然后它尝试解析包含违规行的文档并崩溃。你可以在这里下载:http: //michaelmanesh.com/code/libxml2-crash.zip