当前位置:  开发笔记 > 编程语言 > 正文

解析iPhone上的HTML

如何解决《解析iPhone上的HTML》经验,为你挑选了6个好方法。

任何人都可以推荐用于HTML解析的C或Objective-C库吗?它需要处理不完全验证的凌乱的HTML代码.

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



1> 小智..:

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

要求:

- 将libxml2添加到您的项目中

    菜单项目 - >编辑项目设置

    搜索设置"标题搜索路径"

    添加新的搜索路径"$ {SDKROOT}/usr/include/libxml2"

    启用递归选项

- 将libxml2库添加到您的项目中

    菜单项目 - >编辑项目设置

    搜索设置"其他链接标志"

    添加新的搜索标记"-lxml2"

- 从hpple获取以下源代码文件,并将它们添加到您的项目中:

    TFpple.h

    TFpple.m

    TFppleElement.h

    TFppleElement.m

    XPathQuery.h

    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库代码编写自己的轻量级解决方案.


我刚刚使用过它,到目前为止效果很好.

2> Sophie Alper..:

看起来像libxml2.2在SDK中,并libxml/HTMLparser.h声称如下:

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

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



3> 小智..:

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

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

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

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

如果你正在进行大量的解析,那就是恶性漏洞.现在....我如何让我的夜晚回来:-)


看起来此修复程序已在最新提交中更新

4> Ben Reeves..:

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

Objective-C的-HMTL解析器


网站已关闭,您应该在GitHub上发布!

5> tcurdt..:

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



6> 小智..:

您可以查看ElementParser.它提供了"足够"的HTML和XML解析.漂亮的界面使XML/HTML文档非常简单.http://touchtank.wordpress.com/


ElementParser非常错误,自2009年以来没有更新.我强烈反对使用它.
推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有