1.下载Htmlcxx,http://sourceforge.net/projects/htmlcxx/
2.解压htmlcxx-0.85.tar.gz
3.打开htmlcxx.vcproj,注意是htmlcxx.vcproj,不是下面的htmlcxxapp.vcproj
4.使用VS打开htmlcxx.vcproj,需要对项目进行转换
5.选择编译模式:Debug或Release模式,具体由需要使用到Htmlcxx库文件的项目的编译模式决定,但注意Debug对Debug,Release对Release,不要混乱
6.右击htmlcxx,选择属性,可以看到运行库默认的是”多线程调试/MTD“:
![](https://i-blog.csdnimg.cn/blog_migrate/0874d2cf7b567590d9f3a93ed1cc6b9b.jpeg)
7.具体选择运行库时,由由需要使用到Htmlcxx库文件的项目的运行库决定,由于本人项目使用的是”多线程调试 DLL (/MDd)“,故选择”多线程调试 DLL (/MDd)“进行编译
8.报错:
![](https://i-blog.csdnimg.cn/blog_migrate/394f0be5ce41ffcbcd16742eb862aeaa.jpeg)
9.排错:
![](https://i-blog.csdnimg.cn/blog_migrate/f48a31aace47866b3461e9e876fe1f9b.jpeg)
改成
![](https://i-blog.csdnimg.cn/blog_migrate/8b549eed6a83b7c171b7d266cb73a38e.jpeg)
10.在所开发项目文件夹中,新建”htmlcxx“文件,里面添加两个子文件夹”lib“和”include“
11.将编译好的htmlcxx.lib(Debug或者Release,由htmlcxx编译模式决定)拷贝到lib文件夹,将html文件夹中所有的.h头文件和ParserSax.tcc添加到include文件夹
12.选择所开发项目的项目属性,添加库文件htmlcxx.lib到项目中(VC++目录下的库目录中添加htmlcxx.lib路径即可)
13.所开发的项目的头文件中添加以下内容:
1 2 3 4 5 6 7 | #include <string> #include "htmlcxx/include/ParserDom.h" using namespace std; using namespace htmlcxx; #pragma comment(lib,"htmlcxx.lib") |
14.具体使用代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | void NuistMoney::GetLogWeekTxt() { if (logined== true ) { logWidget->clear(); lbmessage->setText(tr( "正在查询本周消费,请稍候..." )); QString data=GetToAllNet(tr( "http://www.**************.com.cn" )); string html=data.toStdString(); HTML::ParserDom parser; tree<HTML::Node> dom = parser.parseTree(html); tree<HTML::Node>::iterator it ; tree<HTML::Node>::iterator end; //输出所有的文本节点 it= dom.begin(); end= dom.end(); QString str; QString str1; QString str2; for (; it != end; ++it) { if (strcasecmp(it->tagName().c_str(), "td" ) == 0) //首先判断是否是td字段 { it+=1; //如果是td字段,则读取下一个字段的值,<td>字段1</td><td>字段2</td>,获取字段2 if ((!it->isTag()) && (!it->isComment())) { if (it->text()!= " " ) { str1=QString::fromStdString(it->text()).trimmed(); } } if (str1==tr( "交易金额" )||str1==tr( "卡余额" )) { it+=5; } else { it+=3; } str2=QString::fromStdString(it->text()).trimmed(); str=tr( "\t" )+str1+tr( "\t\t" )+str2; logWidget->addItem(str); } if (str1==tr( "卡余额" )) { logWidget->addItem(tr( " " )); str1.clear(); } } } else { lbmessage->setText(tr( "您未登陆,请您先登陆..." )); } } |