在iPhone上解析HTML

在iPhone上解析HTML,iphone,html,parsing,html-content-extraction,Iphone,Html,Parsing,Html Content Extraction,有人能推荐一个C或Objective-C库用于HTML解析吗?它需要处理杂乱无章的HTML代码,而这些代码无法完全验证 是否存在这样的库,或者我最好只是尝试使用正则表达式?这可能取决于HTML的混乱程度以及您想要提取的内容。但通常做得很好。它是用C编写的,我想你应该能够为iPhone构建并静态链接它。您可以轻松地安装命令行版本并首先测试结果。看起来像SDK中的libxml2.2,并且libxml/HTMLparser.h声明如下: 该模块实现了一个HTML 4.0非验证解析器,其API与XML解

有人能推荐一个C或Objective-C库用于HTML解析吗?它需要处理杂乱无章的HTML代码,而这些代码无法完全验证


是否存在这样的库,或者我最好只是尝试使用正则表达式?

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

看起来像SDK中的
libxml2.2
,并且
libxml/HTMLparser.h
声明如下:

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


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

谷歌的GData Objective-C API重新实现NSXMLElement和苹果从iPhone SDK中删除的其他相关类。你可以在这里找到它。我用它通过Jabber处理信息。当然,如果您的HTML格式不正确(缺少结束标记),这可能没有多大帮助。

您可能需要签出ElementParser。它提供了对HTML和XML的“刚好足够”的解析。漂亮的界面使浏览XML/HTML文档变得非常简单

我发现使用XML解析凌乱的HTML非常有用。Hpple项目是XPathQuery库上用于解析HTML的Objective-C包装器。使用它,您可以发送XPath查询并接收结果

要求

-将libxml2包含添加到项目中

  • 菜单项目->编辑项目设置
  • 搜索设置“标题搜索路径”
  • 添加新的搜索路径“${SDKROOT}/usr/include/libxml2”
  • 启用递归选项
  • -将libxml2库添加到项目中

  • 菜单项目->编辑项目设置
  • 搜索设置“其他链接器标志”
  • 添加新的搜索标志“-lxml2”
  • -从获取以下源代码文件并将其添加到项目中:

  • TFpple.h
  • TFpple.m
  • TFppleElement.h
  • TFppleElement.m
  • XPathQuery.h
  • XPathQuery.m
  • -继续走走,感受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库代码编写自己的轻量级解决方案。

    我编写了一个关于libxml的轻量级包装,这可能很有用:


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

    如果有人通过谷歌搜索一个漂亮的XPath解析器来到这里并使用了TFHpple,请注意TFHpple使用的是XPathQuery。这很好,但是内存泄漏

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

    因此,您将看到这段代码:添加两个清理行

      xmlNodeSetPtr nodes = xpathObj->nodesetval;
      if (!nodes)
        {
          NSLog(@"Nodes was nil.");
            /* Cleanup */
            xmlXPathFreeObject(xpathObj);
            xmlXPathFreeContext(xpathCtx);
          return nil;
        }
    
    如果你正在做大量的分析,这是一个恶性泄漏。
    现在。。。。如何找回我的夜晚:-)

    我们使用Convertigo在服务器端解析HTML,并将干净整洁的JSON web服务返回到我们的移动应用程序中

    我刚才使用了这个,到目前为止它工作得非常好。它与字符串数据配合得非常好。你能告诉我如何从html中获取和显示图像吗?顺便说一句,图像不是存储在html中的。您必须获取URL并自行下载。一旦你有了URL,你就可以使用[NSData DATA WITH CONTENTS OFURL]来获取文件。自2011年7月8日以来,TFHpple的
    search:
    方法被重命名为
    searchWithXPathQuery:
    这对我来说非常有效,谢谢。我确实有一个奇怪的怪癖,文件名前面似乎有一个空格字符,但这可能是由于编码错误造成的,与hpple无关。看起来很棒。我可能正在我即将推出的iPad应用程序中使用它。网站已关闭,您应该将此发布到GitHub上!本,我试着添加你的库-它也是用于iphone开发的吗?因为我得到了新的链接:ElementParser有很多错误,自2009年以来没有更新过。我强烈建议不要使用它。我只能找到自2009年以来没有更新过的Hpple。我在哪里可以找到这个“TFHpple”?-是的,我想它很旧了。一旦你清理了漏洞,它就可以正常工作。看起来这个修复程序是在最新的委员会中更新的,比如Ben Reeves lightweight wrapper,他在这个帖子中提到过。Wrapper已经转向github:这个问题怎么会“不具建设性”?这并没有回答这个问题-他正在寻找一个客户端库。