zoukankan      html  css  js  c++  java
  • 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("	")+str1+tr("		")+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

  • 相关阅读:
    QAbstractItemModel使用样例与解析(Model::index使用了createIndex,它会被销毁吗?被销毁了,因为栈对象出了括号就会被销毁)
    更多的人为了追求自己真正热爱的事,甚至会在职业生涯刚开始时拒绝许多高薪工作,这样的人最终都成了真正的赢家。
    MYSQL分库分表之sharding-jdbc第四篇
    MYSQL分库分表之 Sharding-JDBC第三篇
    MySQL分库分表之Sharding-JDBC第二篇
    MySQL分库分表之Sharding-JDBC第一篇
    增加复杂度的12危险信号
    ASP.NET-Core-Web-API-Best-Practices-Guide
    聚合
    浏览器输入www.baidu.com后干啥了-web性能优化指南
  • 原文地址:https://www.cnblogs.com/striver-zhu/p/4451781.html
Copyright © 2011-2022 走看看