zoukankan      html  css  js  c++  java
  • vs2010环境 c++ 使用htmlcxx解析html .转

    vs2010环境 c++ 使用htmlcxx解析html

    from http://blog.csdn.net/q408384053/article/details/8070627

    因为最近在弄一个获取课表的程序,课表的内容来自教务系统网站,所以需要解析html。然后我就在网上搜索”c++解析html“,然后就找到了htmlcxx这个开源库,下载下来,发现不会使用它,然后又在网站上搜索相关资料。最后找到一个博客(http://www.cnblogs.com/zhanglanyun/),然后用email联系了他,解决了问题,很感谢他!

    接着说如何使用(作为参考,可能在别人的电脑上和我这有些区别):

    1.下载htmlcxx库,我下的是tar.gz格式的,然后用解压软件将它解压出来。

    2.找到一个vs的工程文件htmlcxx.vcproj(旧版本的vs工程),打开打,直接编译可能会提示有一个错误(因为在我电脑里出现了),错误指向了一个常字符指针(const char *),如下图,然后只需要把后面的引号删掉,重新打一次,再编译,就可以成功编译了。

    3.编译完成之后,工程生成了一个lib静态库文件。

    4.但是这个库下载下来是不支持中文的,也就是说比如html中标签里含有中文,就会出错(这是我在获取源代码时,因为获取不完全,导致程序出错,才发现的)。如果出现了这个问题,可以查看以下两个博客,里面有解决方法。

    http://my.oschina.net/leeeryan/blog/9914

    http://blog.csdn.net/schoolers/article/details/6891061

    5.然后在你的工程里面设置vc的包含目录和库目录,把htmlcxx文件夹包含,然后库目录包含刚才生成的lib的文件夹。另外,也可以将刚生成的lib拷贝到你的工程目录下,用#pragma (lib, "xxxx.lib")加载静态链接库。

    6.接着,在 工程属性->c/c++->代码生成 里面将运行库设置为/MTd。

    这就可以使用了。

    如何使用呢?

    以控制台为例

    1.#include <htmlcxx/html/ParserDom.h>

    2. #include <htmlcxx/html/utils.h>

    3.使用命名空间,using namespace htmlcxx

    4.

    1. HTML::ParserDom parser ;        //可以用来将html代码转换成dom树   
    2. tree<HTML::Node> dom ;            //用来储存html各个节点   
    3. tree<HTML::Node>::iterator iterator ; //树的迭代器   
    4.   
    5. iterator = dom.begin () ;               //得到dom的第一个节点   
    6. iterator->tagName () ;                  //获得节点的标签名   
    7. iterator->parserAttributes () ;         //附上节点属性   
    8. iterator->Attribute ("href").second ;   //此行执行需要上行,这相当于获取标签的href属性,之所以有second,因为Attribute ("attributeName")返回了一个pair  
    HTML::ParserDom parser ;		//可以用来将html代码转换成dom树
    tree<HTML::Node> dom ;			//用来储存html各个节点
    tree<HTML::Node>::iterator iterator ;	//树的迭代器
    
    iterator = dom.begin () ;               //得到dom的第一个节点
    iterator->tagName () ;                  //获得节点的标签名
    iterator->parserAttributes () ;         //附上节点属性
    iterator->Attribute ("href").second ;   //此行执行需要上行,这相当于获取标签的href属性,之所以有second,因为Attribute ("attributeName")返回了一个pair
    

    在博客记录一下,方便以后使用。若有说的不对的地方,欢迎指出。

  • 相关阅读:
    PS 修复画笔
    PS 魔棒工具、仿制图章
    PS选区的应用
    PS界面介绍
    火狐浏览器任务栏设置默认 隐私模式开启
    [CSS] Using inline-grid to gain easy control over gap and size
    [AWS] Presign url for S3
    [CSS] Customer focus / disabled style for select element
    [CSS] Using single grid-template-area and justify-self to select arrow down icon in select
    [CSS 3] Using CSS attribute selector
  • 原文地址:https://www.cnblogs.com/shenlian/p/2811931.html
Copyright © 2011-2022 走看看