在 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 的区别
lxml 和 libxml2 哪个更适合在 Python 中解析格式错误的 html?