提问人:tapmonkey 提问时间:7/15/2011 最后编辑:user427969tapmonkey 更新时间:11/28/2020 访问量:6372
在 iOS 中使用 libxml2 解析 (X)Html 的示例
Example for parsing (X)Html with libxml2 in iOS
问:
最近,我开始在 iOS iPhone 项目中使用 libxml2 库。我阅读了一些有用的链接,例如:
http://laurentparenteau.com/blog/2009/12/parsing-xhtml-in-c-a-libxml2-tutorial/
这里有一些非常好的帖子:
http://bill.dudney.net/roller/objc/entry/libxml2_push_parsing
我设法检索了远程html(使用ASIHTTPRequest),并成功地将“didReceiveData”事件上的数据(NSData)推送到了包含使用htmlCreatePushParserCtxt(SAX样式)创建的解析器的包装类。我很好地得到了startDocument 和 endDocument 回调。在“startElement”和“characters”回调中,我打印了“localname”参数(const xmlChar)。在控制台中,我看到它找到了“html”,然后是“body”,然后是一些“p”标签,但随后我得到了许多无法识别的字符(有时它甚至看起来像中文..)...
无论如何,在进入许多代码细节之前,我想问一下是否有人在基于 objective-c 的 projet 中用 libxml2 解析 (x)html 的工作示例?我尝试在谷歌上搜索比提到的 2 个链接更多,但直到现在还没有运气。
答:
为什么要使用 Apple 的内置类?如果您正在制作适用于 iOS 的应用程序,那么使用 Foundation 类比使用 C 库更有意义。您可以在 Apple 网站上访问 NSXMLParser 的文档。libxml2
NSXMLParser
如果不想直接使用 NSXMLParser,可以尝试使用 NSXMLDocument 分析 XML,NSXMLDocument 具有一种易于使用的方法来分析 XML 数据。您甚至可以使用 init 方法的选项将 HTML 数据读取为 XHTML。- (id)initWithData:(NSData *)data options:(NSUInteger)mask error:(NSError **)error
NSXMLDocumentTidyHTML
评论
我提议 艾伦·夸特曼 : http://blog.alanquatermain.me/2013/01/09/using-aqxmlparser-and-friends/AQXMLParser
它是一个薄包装器 aroung libxml2,比 NSXMLParser 性能高得多。
将 property 设置为 yes,以便它在 HTML 模式下使用 libxml。(我用过很多次,即使使用无效的html,它也能做得很好)HTMLMode
评论