Sop*_*ert 69 html iphone parsing html-content-extraction
任何人都可以推荐用于HTML解析的C或Objective-C库吗?它需要处理不完全验证的凌乱的HTML代码.
这样的库是否存在,或者我最好只是尝试使用正则表达式?
小智 89
我发现使用hpple非常有用来解析凌乱的HTML.Hpple项目是用于解析HTML的XPathQuery库上的Objective-C包装器.使用它,您可以发送XPath查询并接收结果.
要求:
- 将libxml2添加到您的项目中
- 将libxml2库添加到您的项目中
- 从hpple获取以下源代码文件,并将它们添加到您的项目中:
- 在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];
Run Code Online (Sandbox Code Playgroud)
已知的问题
由于hpple是XPathQuery的包装器,它是另一个包装器,因此该选项可能不是最有效的.如果性能是项目中的问题,我建议基于hpple和xpathquery库代码编写自己的轻量级解决方案.
Sop*_*ert 49
看起来像libxml2.2在SDK中,并libxml/HTMLparser.h声称如下:
此模块实现了一个HTML 4.0非验证解析器,其API与XML解析器兼容.它应该能够解析"真实世界"的HTML,即使从规范的角度严重破坏.
这听起来像我需要的,所以我可能会用它.
小智 20
以防万一有人通过谷歌搜索一个很好的XPath解析器并离开并使用TFHpple,请注意TFHpple使用XPathQuery.这很不错,但内存泄漏.
在函数*PerformXPathQuery中,如果发现节点为零,则在清理之前它会跳出.
所以你看到这段代码:添加两个清理行.
xmlNodeSetPtr nodes = xpathObj->nodesetval;
if (!nodes)
{
NSLog(@"Nodes was nil.");
/* Cleanup */
xmlXPathFreeObject(xpathObj);
xmlXPathFreeContext(xpathCtx);
return nil;
}
Run Code Online (Sandbox Code Playgroud)
如果你正在进行大量的解析,那就是恶性漏洞.现在....我如何让我的夜晚回来:-)
小智 5
您可以查看ElementParser.它提供了"足够"的HTML和XML解析.漂亮的界面使XML/HTML文档非常简单.http://touchtank.wordpress.com/
| 归档时间: |
|
| 查看次数: |
73473 次 |
| 最近记录: |