ObjectiveGumbo 0.1

ObjectiveGumbo 0.1

测试已测试
Lang语言 CC
许可证 自定义
发布最后发布2014年12月

未声明的维护。



  • 编程托马斯

ObjectiveGumbo 是一套类,它使从 Objective-C 与 Gumbo (Google 的 HTML5 解析库,用 C 编写) 交互变得更加容易。

示例

示例原本包含在 ObjectiveGumbo 中,但为了避免膨胀,我将它们移动到另一个仓库。对于 iOS 和 OSX 的示例,请现在访问我的 OG-Demos 仓库

编译

要将 ObjectiveGumbo 添加到您的 Mac/iOS 项目中,请执行以下操作

  • 获取这个仓库的本地副本
  • 将 ObjectiveGumbo 目录添加到您的 Xcode 项目中,或者 alternatively 将您的项目添加到 ObjectiveGumbo 工作空间。此目录还包含 Gumbo 的源代码

示例用法

获取Hacker News 主页上的所有链接并记录它们(查看 Hacker News 示例以获取更高级的方法)

OGNode * data = [ObjectiveGumbo parseDocumentWithUrl:[NSURL URLWithString:@"http://news.ycombinator.com"]];
NSArray * tableRows = [data elementsWithClass:@"title"];
for (OGElement * tableRow in tableRows)
{
    if (tableRow.children.count > 1)
    {
        OGElement * link = tableRow.children[0];
        NSLog(@"%@", link.attributes[@"href"]);
    }
}

获取 BBC 新闻的正文文本

OGNode * data = [ObjectiveGumbo parseDocumentWithUrl:[NSURL URLWithString:@"http://bbc.co.uk/news"]];
OGElemet * body = [data elementsWithTag:GUMBO_TAG_BODY];
NSLog(@"%@", body.text);

为什么使用这个而不是 plain C API?

这个库是为了面向对象和 Cocoa 编写的,以使其从 Objective-C 交互变得更容易,同时也不必担心 C 风格的指针和释放内存。此外,它还使用原生 Objective-C 体系结构,如字典和数组,而不是 Gumbo 提供的 Vector 实现。它还通过允许您根据标签、ID 或类(如 jQuery)快速获取标记来减少您必须编写的代码量。

ObjectiveGumbo

这个类应该用于从 NSStrings、NSURL 或 NSData 解析 HTML。请注意,与 Gumbo 一样,ObjectiveGumbo 支持 UTF8 网页。

OGNode

所有标签和文本碎片都将转换为 OGNode(及其子类)。以下 HTML 将被解析如下

<p>This is a paragraph. <b>This is bold</b></p>
Paragraph (OGElement)
    'This is a paragraph. ' (OGText)
    Bold (OGElement)
        'This is bold'  

OGNode 提供了各种实用函数,例如获取纯文本内容和快速查找子节点

  • elementsWithClass 允许您快速查找具有给定类的所有元素
  • elementsWithID 返回所有具有匹配 ID 的元素的数组
  • elementsWithTag 找到特定类型的所有标签(如链接)

OGElement

OGNode 的子类,提供一个子元素数组、一个属性字典和一个类数组。

OGDocument

OGElement 的子类,包括 DOCTYPE 信息。如果你在使用 ObjectiveGumbo 中的 parseDocument* 函数,你将看到这个作为根元素返回。

OGText

OGNode 的子类,表示一些普通文本。请注意,所有 OGNodes 都有一个 -(NSString*)text 函数,但是 OGElement 会递归地搜索其子节点。

未来目标

  • 按照 Gumbo 的进展
  • 一旦 Gumbo 达到最终发布,将大多数代码移植到 Objective-C 或重新使用 Cocoa 类(NSString、NSArray、NSDictionary 等)进行非平凡部分的编写
  • 添加更多类似 jQuery 的选择功能

联系方式

如果你在项目中使用 ObjectiveGumbo 或者想要询问特定支持问题,请随时通过编程thomas [at] gmail [dot] com 发送电子邮件。提交问题也是联系我的好方法