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

Posted

技术标签:

【中文标题】在 iOS 中使用 libxml2 解析 (X)Html 的示例【英文标题】:Example for parsing (X)Html with libxml2 in iOS 【发布时间】:2011-10-05 22:43:14 【问题描述】:

最近我开始在 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 的项目中使用libxml2 解析(x)html 的工作示例?我尝试在谷歌上搜索超过 2 个提到的链接,但直到现在还没有运气。

【问题讨论】:

【参考方案1】:

我建议AQXMLParser by alan quartemain : http://blog.alanquatermain.me/2013/01/09/using-aqxmlparser-and-friends/

它是一个围绕 libxml2 的瘦包装器,比 NSXMLParser 性能要好得多。

HTMLMode 属性设置为yes,因此它在html 模式下使用libxml..(我多次使用它,即使使用无效的html 也能很好地运行)

【讨论】:

【参考方案2】:

为什么要使用 libxml2 而不是 Apple 的内置 NSXMLParser 类?如果您正在为 iOS 制作应用程序,那么为此使用 Foundation 类比使用 C 库更有意义。您可以访问 NSXMLParser on Apple's website 的文档。

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

【讨论】:

那么答案可以在我提到的链接帖子的第 4 段中找到:bill.dudney.net/roller/objc/entry/libxml2_push_parsing NSXMLParser 的内存占用很高,更重要的是:不喜欢 html。 NSXMLDocument 在 ios 上不可用,KissXML 提供了替换

以上是关于在 iOS 中使用 libxml2 解析 (X)Html 的示例的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 关于 NSXMLParser 和 libxml2 的区别

iOS -数据库网络之xml解析之第三方解析XML

lxml 和 libxml2 哪个更适合在 Python 中解析格式错误的 html?

如何使用 libxml2 解析来自 GInputStream (GLibGIO/GVFS) 的数据?

装php中,无法安装libxml2,怎么解

无法使用 libxml2.h,找不到文件,XMPP 框架