C++ 使用Htmlcxx解析Html内容(VS编译库文件)
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“:
7.具体选择运行库时,由由需要使用到Htmlcxx库文件的项目的运行库决定,由于本人项目使用的是”多线程调试 DLL (/MDd)“,故选择”多线程调试 DLL (/MDd)“进行编译
8.报错:
9.排错:
改成
10.在所开发项目文件夹中,新建”htmlcxx“文件,里面添加两个子文件夹”lib“和”include“
11.将编译好的htmlcxx.lib(Debug或者Release,由htmlcxx编译模式决定)拷贝到lib文件夹,将html文件夹中所有的.h头文件和ParserSax.tcc添加到include文件夹
12.选择所开发项目的项目属性,添加库文件htmlcxx.lib到项目中(VC++目录下的库目录中添加htmlcxx.lib路径即可)
13.所开发的项目的头文件中添加以下内容:
#include <string> #include "htmlcxx/include/ParserDom.h" using namespace std; using namespace htmlcxx; #pragma comment(lib,"htmlcxx.lib")
14.具体使用代码:
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("您未登陆,请您先登陆...")); } }
附上htmlcxx学习资料:http://blog.csdn.net/youfangyuan/article/details/7816518