ObjectiveGumbo 是一套类,它使从 Objective-C 与 Gumbo (Google 的 HTML5 解析库,用 C 编写) 交互变得更加容易。
示例原本包含在 ObjectiveGumbo 中,但为了避免膨胀,我将它们移动到另一个仓库。对于 iOS 和 OSX 的示例,请现在访问我的 OG-Demos 仓库。
要将 ObjectiveGumbo 添加到您的 Mac/iOS 项目中,请执行以下操作
获取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);
这个库是为了面向对象和 Cocoa 编写的,以使其从 Objective-C 交互变得更容易,同时也不必担心 C 风格的指针和释放内存。此外,它还使用原生 Objective-C 体系结构,如字典和数组,而不是 Gumbo 提供的 Vector 实现。它还通过允许您根据标签、ID 或类(如 jQuery)快速获取标记来减少您必须编写的代码量。
这个类应该用于从 NSStrings、NSURL 或 NSData 解析 HTML。请注意,与 Gumbo 一样,ObjectiveGumbo 仅 支持 UTF8 网页。
所有标签和文本碎片都将转换为 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 提供了各种实用函数,例如获取纯文本内容和快速查找子节点
OGNode 的子类,提供一个子元素数组、一个属性字典和一个类数组。
OGElement 的子类,包括 DOCTYPE 信息。如果你在使用 ObjectiveGumbo 中的 parseDocument* 函数,你将看到这个作为根元素返回。
OGNode 的子类,表示一些普通文本。请注意,所有 OGNodes 都有一个 -(NSString*)text 函数,但是 OGElement 会递归地搜索其子节点。
如果你在项目中使用 ObjectiveGumbo 或者想要询问特定支持问题,请随时通过编程thomas [at] gmail [dot] com 发送电子邮件。提交问题也是联系我的好方法