在 iOS 中使用 libxml2 解析 (X)Html 的示例

Example for parsing (X)Html with libxml2 in iOS

提问人:tapmonkey 提问时间:7/15/2011 最后编辑:user427969tapmonkey 更新时间:11/28/2020 访问量:6372

问:

最近,我开始在 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 个链接更多,但直到现在还没有运气。

objective-c ios html 解析 libxml2

评论


答:

-3赞 Alex Nichol 9/5/2011 #1

为什么要使用 Apple 的内置类?如果您正在制作适用于 iOS 的应用程序,那么使用 Foundation 类比使用 C 库更有意义。您可以在 Apple 网站上访问 NSXMLParser 的文档。libxml2NSXMLParser

如果不想直接使用 NSXMLParser,可以尝试使用 NSXMLDocument 分析 XML,NSXMLDocument 具有一种易于使用的方法来分析 XML 数据。您甚至可以使用 init 方法的选项将 HTML 数据读取为 XHTML。- (id)initWithData:(NSData *)data options:(NSUInteger)mask error:(NSError **)errorNSXMLDocumentTidyHTML

评论

1赞 tapmonkey 9/5/2011
好吧,答案可以在我提到的链接帖子的第 4 段中找到:bill.dudney.net/roller/objc/entry/libxml2_push_parsing
0赞 Daij-Djan 1/1/2013
NSXMLParser 的内存占用量很大,更重要的是:不喜欢 html。
0赞 Daij-Djan 1/1/2013
NSXMLDocument 在 ios 上不可用,KissXML 提供了一个替代品
0赞 Daij-Djan 1/1/2013 #2

我提议 艾伦·夸特曼 : http://blog.alanquatermain.me/2013/01/09/using-aqxmlparser-and-friends/AQXMLParser

它是一个薄包装器 aroung libxml2,比 NSXMLParser 性能高得多。

将 property 设置为 yes,以便它在 HTML 模式下使用 libxml。(我用过很多次,即使使用无效的html,它也能做得很好)HTMLMode