任何人都可以推荐一个或C的目标-C library for HTML分析?它需要处理混乱HTML代码,不会相当验证。

不会这样的库存,或者我最好只是试图使用普通的表情?

有帮助吗?

解决方案 2

看起来SDK中有 libxml2.2 libxml / HTMLparser.h 声称如下:

  

此模块实现了一个HTML 4.0非验证解析器,其API与XML解析器兼容。它应该能够解析“真实世界”。 HTML,即使从规范的角度严重破坏。

这听起来像我需要的,所以我可能会使用它。

其他提示

我发现使用 hpple 很有用的分析乱HTML。Hpple项目是一个目标-C包装上的XPathQuery库,用于分析HTML。使用它,你可以送XPath查询和接收结果。

要求:

-添加libxml2包括到项目

  1. 菜单项目>编辑项目设置
  2. 搜索设定"的标题搜索的道路"
  3. 添加新的搜索的道路"${SDKROOT}/usr/include/libxml2"
  4. 启用递归的选择

-添加libxml2库来到你的项目

  1. 菜单项目>编辑项目设置
  2. 搜索设置"的其他接头的标志"
  3. 添加新的搜索标志"-lxml2"

-从 hpple 得到下列来源码文件的一个增加他们给你的项目:

  1. TFpple.h
  2. TFpple.m
  3. TFppleElement.h
  4. TFppleElement.m
  5. XPathQuery.h
  6. XPathQuery.m

-散步在 w3school XPath教程 感到舒适用XPath的语言。

代码的例子

#import "TFHpple.h"

NSData *data = [[NSData alloc] initWithContentsOfFile:@"example.html"];

// Create parser
xpathParser = [[TFHpple alloc] initWithHTMLData:data];

//Get all the cells of the 2nd row of the 3rd table 
NSArray *elements  = [xpathParser searchWithXPathQuery:@"//table[3]/tr[2]/td"];

// Access the first cell
TFHppleElement *element = [elements objectAtIndex:0];

// Get the text within the cell tag
NSString *content = [element content];  

[xpathParser release];
[data release];

已知的问题

作为hpple是一个包装上XPathQuery这是另一个包装,这一选择可能不是效率最高的。如果性能是一个问题项目中,我建议代码你自己的轻量级的解决方案的基础上hpple和xpathquery图书馆的代码。

以防万一有人通过谷歌搜索一个不错的XPath解析器并离开并使用TFHpple,请注意TFHpple使用XPathQuery。这非常好,但内存泄漏。

在函数* PerformXPathQuery中,如果发现节点为零,则在清理之前它会跳出。

所以你看到这段代码:添加两个清理行。

  xmlNodeSetPtr nodes = xpathObj->nodesetval;
  if (!nodes)
    {
      NSLog(@"Nodes was nil.");
        /* Cleanup */
        xmlXPathFreeObject(xpathObj);
        xmlXPathFreeContext(xpathCtx);
      return nil;
    }

如果您正在进行大量解析,那就是恶性泄漏。 现在....我怎么回到我的晚上: - )

我在libxml周围写了一个轻量级的包装器,它可能很有用:

Objective-C-HMTL-Parser

这可能取决于HTML的混乱程度以及您想要提取的内容。但通常 Tidy 做得相当不错。它是用C语言编写的,我猜你应该能够为iPhone构建和静态链接它。您可以轻松安装命令行版本并首先测试结果。

您可能想要查看ElementParser。它提供了“恰到好处”的功能。解析HTML和XML。漂亮的界面使XML / HTML文档非常简单。 http://touchtank.wordpress.com/

如何使用Webkit组件,以及可能的第三方软件包(如jquery)来完成这些任务?是不是可以在一个不可见的组件中获取html数据并利用javascript框架的非常成熟的选择器?

Google的GData Objective-C API重新实现了NSXMLElement以及Apple从iPhone SDK中删除的其他相关类。你可以在这里找到它 http://code.google.com/p/gdata-的ObjectiveC客户端/ 。我用它来通过Jabber处理消息传递。当然,如果您的HTML格式不正确(缺少结束标记),这可能没什么用。

我们使用Convertigo在服务器端解析HTML并向我们的移动应用程序返回干净整洁的JSON Web服务

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top