最近我开始在iOS iPhone项目中使用libxml2 lib。我读了一些有用的链接,比如:
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的项目中使用libxml2解析(x)html的工作示例?我尝试谷歌搜索更多,然后提到2个链接,但直到现在没有运气。
我建议由alan quartemain提供AQXMLParser
:http://blog.alanquatermain.me/2013/01/09/using-aqxmlparser-and-friends/
它是libxml2的一个瘦包装器,比NSXMLParser更多的性能。
将HTMLMode
属性设置为yes所以它在html模式下使用libxml ..(我使用了很多次,即使使用无效的html也很好)
你为什么要使用libxml2
而不是Apple的内置NSXMLParser
类?如果您正在为iOS创建应用程序,那么使用Foundation类比使用C库更有意义。您可以访问NSXMLParser on Apple's website的文档。
如果您不想直接使用NSXMLParser,可以尝试使用NSXMLDocument解析XML,- (id)initWithData:(NSData *)data options:(NSUInteger)mask error:(NSError **)error
具有易于使用的NSXMLDocumentTidyHTML
方法来解析XML数据。您甚至可以使用qazxswpoi选项将init方法作为XHTML读取HTML数据。