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

发布于 2024-11-23 16:59:33 字数 897 浏览 2 评论 0原文

最近,我开始在 iOS iPhone 项目中使用 libxml2 库。我读了一些有用的链接,例如:

http:// laurentparenteau.com/blog/2009/12/parsing-xhtml-in-ca-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 的工作示例?我尝试在谷歌上搜索更多比提到的两个链接,但直到现在还没有运气。

Recently I started to play around with the libxml2 lib within an iOS iPhone project. I read some useful links, like:

http://laurentparenteau.com/blog/2009/12/parsing-xhtml-in-c-a-libxml2-tutorial/

and some very nice post here:

http://bill.dudney.net/roller/objc/entry/libxml2_push_parsing

I managed to retrieve remote html (with ASIHTTPRequest) and successfully get the data (NSData) on the 'didReceiveData' event pushed to a wrapper class containing a parser created with htmlCreatePushParserCtxt (SAX style). I get nicely the startDocument
and endDocument callbacks. In the 'startElement' and 'characters' callbacks, I print the ' localname' paramater (const xmlChar). In the console I see that it finds 'html', then 'body', then some 'p' tag, but then I get lots of unrecognizable characters (sometimese it looks even like Chinese..)...

Anyway, before getting into to much code details, I want to ask if anyone has a working example of parsing (x)html with libxml2 in an objective-c based projet? I tried googling for more then the 2 mentioned links, but until now no luck.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

魔法少女 2024-11-30 16:59:33

我建议 alan quartemain 的 AQXMLParserhttp://blog.alanquatermain.me/2013/01/09/using-aqxmlparser-and-friends/

这是一个围绕 libxml2 的薄包装器,并且比 NSXMLParser 性能更高。

HTMLMode 属性设置为 yes,以便它在 html 模式下使用 libxml..(我使用了很多次,即使使用无效的 html,它也表现得很好)

I'd propose AQXMLParser by alan quartemain : http://blog.alanquatermain.me/2013/01/09/using-aqxmlparser-and-friends/

it is a thin wrapper aroung libxml2 and a lot more performat than NSXMLParser.

set HTMLMode property to yes so it uses libxml in html mode.. (I used it many times and it does quite well even with non-valid html)

久夏青 2024-11-30 16:59:33

为什么要使用 libxml2 而不是 Apple 的内置 NSXMLParser 类?如果您正在为 iOS 开发应用程序,那么使用 Foundation 类比 C 库更有意义。您可以访问 NSXMLParser 的文档 在苹果网站上

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

Why would you want to use libxml2 over Apple's built-in NSXMLParser class? If you are making an application for iOS, it makes more sense to use a Foundation class for this than a C library. You can access the documentation for NSXMLParser on Apple's website.

If you don't want to use NSXMLParser directly, you could try parsing XML with NSXMLDocument, which has an easy-to-use - (id)initWithData:(NSData *)data options:(NSUInteger)mask error:(NSError **)error method for parsing XML data. You can even use the NSXMLDocumentTidyHTML option for the init method to read HTML data as XHTML.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文