使用htmlcxx-0.85解析html(本地字段)
2013-10-30 10:44
239 查看
在windows上面需要用到解析html的库,刚好找到了这个,虽然网上很多人都说不错,但是从10年起就不再更新了。
不过还好,我的目标也很明确,能替代我之前的采取正则表达式的方式匹配html就行了。
下来下载到,使用git下载:
git clone git://git.code.sf.net/p/htmlcxx/code htmlcxx-code
ok,拿到了源代码。用vs打开htmlcxx.vcproj(解压出来的目录中一共有两个一个是htmlcxx.vcproj,另外一个是htmlcxxapp.vcproj,另外一个是一个测试项目,不过这里不分析他,而根据我自己的用途,写另外一个更有针对性的demo)。
执行编译出来之后
出现:
双击找到错误的地方,把
修改成:
看到编译成功
在上一级目录中找到输出的lib,和目录中的html文件夹一起考到我们新建的工程AnalysisHtml中
设置代码生成为:
main的代码如下:
执行这段程序之后,效果如下:
可以看到两个各个标签被解析出来了,还分了层次;
测试时,使用了还有另外三个html作为测试,都是不完整的html标签,还是能得到一个不错的效果
最后说一下,为什么不用libxm2用htmlcxx
我也试用了一下libxm2(当然网上说libxm2也很好很好云云),不过用起来,还要和zlib、iconv的版本一致才行,否则会出现各种问题,因此就放弃不用了。
不过还好,我的目标也很明确,能替代我之前的采取正则表达式的方式匹配html就行了。
下来下载到,使用git下载:
git clone git://git.code.sf.net/p/htmlcxx/code htmlcxx-code
ok,拿到了源代码。用vs打开htmlcxx.vcproj(解压出来的目录中一共有两个一个是htmlcxx.vcproj,另外一个是htmlcxxapp.vcproj,另外一个是一个测试项目,不过这里不分析他,而根据我自己的用途,写另外一个更有针对性的demo)。
执行编译出来之后
出现:
双击找到错误的地方,把
const char *signature = "";
修改成:
const char *signature = "\xEF\xBB\xBF";
看到编译成功
在上一级目录中找到输出的lib,和目录中的html文件夹一起考到我们新建的工程AnalysisHtml中
设置代码生成为:
main的代码如下:
// AnalysisHtml.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <string.h> #include <iostream> #include "html/ParserDom.h" #include "html/utils.h" using namespace std; using namespace htmlcxx; void UseHtmlCxxAnalysisHtmlStringTestCase() { //解析一段Html代码 string html ="<html><body>测试文字</body></html>"; // string html ="<html><body>测试文字</html>"; // string html ="<html><body>测试文字</body</html>"; // string html ="<html>测试文字</body></html>"; HTML::ParserDom parser; tree<HTML::Node> dom = parser.parseTree(html); //输出整棵DOM树 cout<< dom << endl; //输出树中所有的超链接节点 tree<HTML::Node>::iterator it = dom.begin(); tree<HTML::Node>::iterator end = dom.end(); for(; it != end; ++it) { // _stricmp()函数,在linux下用strcasecmp()函数替换 if (_stricmp(it->tagName().c_str(), "A") == 0) { it->parseAttributes(); cout <<it->attribute("href").second << endl; } } //输出所有的文本节点 it = dom.begin(); end = dom.end(); for(; it != end; ++it) { if ((!it->isTag()) && (!it->isComment())) { cout << it->text(); } } cout << endl; } int _tmain(int argc, _TCHAR* argv[]) { UseHtmlCxxAnalysisHtmlStringTestCase(); return 0; }
执行这段程序之后,效果如下:
可以看到两个各个标签被解析出来了,还分了层次;
测试时,使用了还有另外三个html作为测试,都是不完整的html标签,还是能得到一个不错的效果
最后说一下,为什么不用libxm2用htmlcxx
我也试用了一下libxm2(当然网上说libxm2也很好很好云云),不过用起来,还要和zlib、iconv的版本一致才行,否则会出现各种问题,因此就放弃不用了。
相关文章推荐
- vs2010环境 c++ 使用htmlcxx解析html
- Android WebView使用全面解析(加载网络资源、本地HTML,JS交互)
- html与xml解析库htmlcxx使用过程中的若干问题及解决方案
- vs2010环境 c++ 使用htmlcxx解析html .转
- C++ 使用Htmlcxx解析Html内容(VS编译库文件)
- Android WebView使用全面解析(加载网络资源、本地HTML,JS交互)
- 如何使用Objective-C解析HTML和XML
- 使用 jsoup 对 HTML 文档进行解析和操作
- .net HTMLParser详细使用说明 强大的Filter类 解析HTML文档如此简单
- 使用 jsoup 对 HTML 文档进行解析和操作
- 微信小程序使用wxParse解析html的实现示例
- 使用 jsoup 对 HTML 文档进行解析和操作
- 使用dom对html文档进行解析
- Android中Gson解析json数据使用@SerializedName注解与java对象不匹配的字段
- 使用 HTML 5 开启移动 Web 应用程序的本地存储
- 将Html原码解析成IHTMLDocumet对象,然后使用DOMNode将html显示成一棵树
- ReportViewer Tip -- 使用Html标签自定义ReportViewer字段显示
- python的【爬虫】:使用urllib爬取wiki文章,使用beautifulSoup解析html
- 使用 jsoup 解析HTML
- python 使用 BeautifulSoup 解析html