当前位置: 首页 > 编程日记 > 正文

通过tinyxml解析百度热词榜单

百度热词榜单

初学TinyXml,盯上了解析百度热词榜单。通过curl获取rss地址上的数据。

由于TinyXml不支持,所以要转换为UTF-8格式,命令为

iconv -f gb2312 -t utf-8 baidutop.xml > baidutop.xml

写得很烂,写的时候,心里对内存管理部分总是瞻前顾后的,真是奇怪啊。

ContractedBlock.gifExpandedBlockStart.gifView Code
#include <iostream>
#include
<tinyxml/tinyxml.h>
#include
<tinyxml/tinystr.h>

#include
<vector>

using namespace std;

struct CHrefLink
{
string word;
string url;
};

struct CBaiDuTopKey
{
int rank;
long account;

string keyWord;
string wordUrl;
vector
<CHrefLink> href;
};



void GetHotRank(vector <CBaiDuTopKey> & hot,const char *xml);
void ExtraHrefLink(TiXmlElement *hrefElement,CHrefLink &link);
void ExtraHrefLink(TiXmlElement *hrefElement,string & word,string & url);
void ExtraKeyWords(TiXmlElement *tableColumn,vector <CHrefLink> &vKey);
int main()
{
//创建一个XML的文档对象。
TiXmlDocument *myDocument = new TiXmlDocument("baidutop.xml");
myDocument
->LoadFile();

//获得根元素
TiXmlElement *RootElement = myDocument->RootElement();

//输出根元素名称
cout << RootElement->Value() << endl;

//解析获得有用的信息
TiXmlElement *channelElement = RootElement->FirstChildElement();
string title = channelElement->FirstChildElement()->GetText();
TiXmlElement
*itemElement = (TiXmlElement *)channelElement->LastChild();


int ttl = atoi(((TiXmlElement *)itemElement->PreviousSibling())->GetText());

TiXmlElement
* descriptionElement = (TiXmlElement *)(itemElement->LastChild());

vector
<CBaiDuTopKey> hotword;

GetHotRank(hotword,descriptionElement
->GetText());



cout
<<"Name :"<<title<<"\t Life Time:"<<ttl<<endl;
for(vector<CBaiDuTopKey>::iterator iter = hotword.begin();
iter
!=hotword.end();++iter)
{
cout
<<"\nrank \t"<<(*iter).rank<<"\t amount:"<<(*iter).account;
cout
<<"\nkeyword\t"<<(*iter).keyWord<<"\nurl\t"<<(*iter).wordUrl;
}
cout
<<endl;
delete myDocument;
return 0;
}


void GetHotRank(vector <CBaiDuTopKey> & hotVector,const char *xml)
{
TiXmlDocument
*doc = new TiXmlDocument();

int row = 0;


doc
->Parse(xml);
TiXmlElement
*tableElement = doc->RootElement();
//
TiXmlElement *tableRoot = tableElement->FirstChildElement();
if(!tableRoot)
{
cout
<<"errro !"<<endl;
return ;
}
//第一个元素为table的表头,剔除
for(TiXmlElement *tableRow = tableRoot->FirstChildElement()->NextSiblingElement();
tableRow;
tableRow
= tableRow->NextSiblingElement())
{
CBaiDuTopKey rankedword;
TiXmlElement
*tableColumn = tableRow->FirstChildElement();

//关键词排名
rankedword.rank=atoi(tableColumn->GetText());
tableColumn
= tableColumn->NextSiblingElement();
//关键词
ExtraHrefLink(tableColumn->FirstChildElement(),rankedword.keyWord,rankedword.wordUrl);
tableColumn
= tableColumn->NextSiblingElement();
//搜索量
rankedword.account=atol(tableColumn->GetText());
//链接
tableColumn = tableColumn->NextSiblingElement();

hotVector.push_back(rankedword);
}
delete doc;
}
void ExtraHrefLink(TiXmlElement *hrefElement,CHrefLink &link)
{
link.url
= hrefElement->FirstAttribute()->Value();
link.word
= hrefElement->GetText();

}
void ExtraHrefLink(TiXmlElement *hrefElement,string & word,string & url)
{
url
= hrefElement->FirstAttribute()->Value();
word
= hrefElement->GetText();

}
void ExtraKeyWords(TiXmlElement *tableColumn,vector <CHrefLink> &vKey)
{
TiXmlElement
*hrefElement = tableColumn->FirstChildElement();
CHrefLink links;
while(hrefElement)
{
ExtraHrefLink(hrefElement,links);
vKey.push_back(links);
hrefElement
= hrefElement->NextSiblingElement();
}
}

转载于:https://www.cnblogs.com/westfly/archive/2011/06/12/2078961.html

相关文章:

台湾MCI报告:Security SaaS风潮渐起

这篇文章是台湾产业情报研究所&#xff08;MCI&#xff09;在2008年所作的一份有关Security-as-a-Serivce&#xff08;Security SaaS&#xff0c;为了区别Software-as-a-Serivce&#xff0c;特称呼为Security SaaS&#xff09;的报告。这里有该文章的繁体版下载。这份报告引用了…

由“公共类”看出的一些东西

如果一个类想要被其他类引用&#xff0c;即使是在同一个命名空间下&#xff0c;也要是public&#xff0c;才能被引用。同样&#xff0c;如果想让别人交流&#xff0c;首先自己应该先要“开放”。转载于:https://www.cnblogs.com/HuShaoyi/p/8503708.html

H-ui 前端框架

H-ui 前端框架 架起设计与后端的桥梁轻量级前端框架&#xff0c;简单免费&#xff0c;兼容性好&#xff0c;服务中国网站。 首个付费版产品 H-ui.admin.Pro&#xff0c;盘他&#xff01;转载于:https://www.cnblogs.com/Jeely/p/11051079.html

使用.NET FileSystemWatcher对象监控磁盘文件目录的改变

原文&#xff08;英文&#xff09;&#xff1a;http://www.techrepublic.com/article/use-the-net-filesystemwatcher-object-to-monitor-directory-changes-in-c/6165137 许多情况下&#xff0c;如果创建或修改一个文件&#xff0c;系统需要执行某些任务。例如&#xff0c;在一…

前端使用crypto.js进行加密学习记录

因为我的需求是加密可逆&#xff0c;具有一定的安全性(对安全性要求不高)&#xff0c;所以使用DES或AES即可&#xff0c;我用的是AES js下载 下载 Nodejs后端&#xff1a;对用户密码进行加密 - WJY- - 博客园Nodejs后端 对用户密码进行加密 使用 bcryptjs 插件对用户密码进行…

Exchange笔记之使用OWA加密访问邮箱

Exchange笔记之使用OWA加密访问邮箱 OWA是什么&#xff1f;呵呵&#xff0c;应该用惯Exchange的用户来说都知道&#xff0c;我在这里简单说下&#xff1a;OWA是一种给予Exchange客户端的一种B/S结构访问方式。OWA是Outlook Web Access的缩写&#xff0c;OWA在我们平时使用的时候…

LInkedHashMap实现最近被使用(LRU)缓存

在最近的面试中&#xff0c;我曾被多次问到&#xff0c;怎么实现一个最近最少使用&#xff08;LRU&#xff09;的缓存。缓存可以通过哈希表来实现&#xff0c;然而为这个缓存增加大小限制会变成另一个有意思的问题。现在我们看一下怎么实现。 最近最少使用缓存的回收 为了实现缓…

2019年9月2日开学!寒假时间也定了……

原文&#xff1a; https://mp.weixin.qq.com/s/Dns-ucDwuDeR7lNSlibyAA 放假通知 今年7月1日放暑假 9月2日开学 今天&#xff0c;省教育厅发布通知&#xff0c;2019年全省中小学幼儿园暑期放假时间统一为7月1日&#xff0c;秋季开学时间9月2日。2020年寒假放假时间为1月18日&am…

Vue 增加动态路由功能 【在原有系统上增加】

目录 遇到问题 1. 修改router/index.js 2. 修改 store文件夹下的 2.1 增加 modules/permission.js 2.2 增加modules/tagsViews.js 2.3 修改modules/user.js 2.4 修改getter.js 2.5 修改index.js 遇到问题 1.当出现循环刷新页面&#xff0c;不断进行请求时&#xff0c;检查配…

读取 android的内存、cpu、流量等 信息

内存总量&#xff1a;/proc/meminfocpu信息&#xff1a;/proc/cpuinfocpu使用率&#xff1a;/proc/stat流量信息&#xff1a;/proc/self/net/dev /proc/net/devetc/network/interfaces 这个文件是保存ip,netmask,gateway信息的&#xff08;包括静态和动态&#xff09;&#xff…

CCNA基础知识汇总

本资源是本人学习的过程中的一些笔记和学习中用到的文档。主要包括ospf&#xff0c;ppp&#xff0c;ACL与策略路由&#xff0c;帧中继&#xff0c;***方面。希望能对大家CCNA的学习有所帮助。下载地址&#xff1a;http://down.51cto.com/data/128047 转载于:https://blog.51cto…

PHP面试内容 整理搜集 PHP面试涉及技术 一文回顾全部 主要含PHP面试命令列表 方法列表...

PHP面试时常涉及的内容总结 熟悉框架 逻辑题 快排 正则 数组函数....抽奖, 秒杀数据库 优化,sql书写缓存 redis mecacheLinux命令其他技术 sphinx, swool 异步处理,(同步异步 分布式)其他语言 Java python(多线程 爬虫) go c(一般温个别的)PHP7新特性 整理制作 https://www.cn…

Python 文件 close() 方法

描述 Python 文件 close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作&#xff0c; 否则会触发 ValueError 错误。 close() 方法允许调用多次。 当 file 对象&#xff0c;被引用到操作另外一个文件时&#xff0c;Python 会自动关闭之前的 file 对象。 使用…

校园音乐点歌平台的设计与开发 微信小程序 推荐点歌 java 开发

1、 微信小程序前台展示 &#xff08;基于协同过滤算法 根据用户点歌行为 对用户点歌进行推荐&#xff09; 2 、 使用到的技术框架 Springbootmavenmybatis网易云相关API 3、 后台展示 项目地址&#xff1a; 项目地址

Code Reading -chap4

Chapter4: C Data Structures 67. Read explicit data structure operations in terms of the underlying abstract data class.(P96) 依据显式数据结构背后的抽象数据类去阅读该显式数据结构操作。 &#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xf…

在Red Hat Linux5下构建LAMP网站服务平台之MySQL、PHP的安装与配置

在Red Hat Linux5下构建LAMP网站服务平台之MySQL、PHP的安装与配置 2010-09-09 16:40:49标签&#xff1a;PHP Linux mysql RedHat    [推送到技术圈] 版权声明&#xff1a;原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和…

移动端iPhone系列适配问题的一些坑

完成移动端的开发项目之后&#xff0c;发现谷歌自带的调试器似乎没有什么太大的作用&#xff0c;整天借同事的苹果手机测bug,尽管同事不厌其烦&#xff0c;但还是觉得这iPhone系列适配问题适配到想逃逃逃&#xff0c;好在项目已经顺利完成&#xff0c;测试通过&#xff0c;下面…

shred命令

不做陈冠希必备。。。。 shred --help 用法&#xff1a;shred [选项]... 文件... Overwrite the specified FILE(s) repeatedly, in order to make it harder for even very expensive hardware probing to recover the data.Mandatory arguments to long options are mandator…

WPF初探--RichTextBox

1. 设置RichTextBox运行换行 将AcceptReturn属性设置为true 2. 保存RichTextBox内容到文件 //path为完整保存路径名 private void SaveRtfFile(string path) { FileStream fs new FileStream(path, FileMode.Create); TextRange range; range new TextRange(your…

手把手视频第一节

个人的总结&#xff1a; 今天又重新开始看一套单片机视频&#xff0c;算上这一套已经是第三套了&#xff0c;也总结了一些教训。首先是在抄代码的时候不明白的地方就算后来明白了也要加注释&#xff0c;解释这句话的意思&#xff0c;否则以后看的时候一定是一脸懵逼。 手把手第…

异步操作(三)

APM的轮询聚焦技巧 就从字面意思来理解&#xff0c;每隔一段时间来查询&#xff0c;异步操作的结果。而怎么实现轮询的方法了&#xff0c;这里就要谈到IAsyncResult接口。它定义了若干个只读属性 publicinterfaceIAsyncResult{ Object AsyncState {get;} WaitHandle AsyncWaitH…

Django-C002-深入模型,到底有多深

此文章完成度【100%】留着以后忘记的回顾。多写多练多思考&#xff0c;我会努力写出有意思的demo&#xff0c;如果知识点有错误、误导&#xff0c;欢迎大家在评论处写下你的感想或者纠错。 ORM介绍&#xff1a;对象关系映射&#xff08;英语&#xff1a;(Object Relational Map…

Linux中断流程分析

裸机中断&#xff1a; 1、中断流入口 2、事先注册中断处理程序 3、根据中断源编号&#xff0c;调取处理程序 irq_svc&#xff1a;1、等到产生中断源的编号&#xff08;每一个中断号都有一个描述结构&#xff09; 2、转载于:https://www.cnblogs.com/sanshijvshi/p/8531025.html…

手把手视频第二节

一、单片机的三大内部资源&#xff08;我们作为用户&#xff0c;单片机可以提供给我们的资源&#xff09; 1、FALSH&#xff08;程序存储空间&#xff09; &#xff08;1&#xff09;早期使用的一般是TOPROM &#xff0c;程序只能写入一次&#xff0c;程序写错了只能换一块。 &…

SQL Server DATEADD() 函数

定义和用法 DATEADD() 函数在日期中添加或减去指定的时间间隔。 语法 DATEADD(datepart,number,date) date 参数是合法的日期表达式。number 是您希望添加的间隔数&#xff1b;对于未来的时间&#xff0c;此数是正数&#xff0c;对于过去的时间&#xff0c;此数是负数。 datepa…

致广大关注《网络规划设计师考试案例梳理、真题透解与强化训练》读者朋友的一封信...

致广大关注《网络规划设计师考试案例梳理、真题透解与强化训练》读者朋友的一封信 书是人类进步的阶梯&#xff0c;读书是增强个人软实力的佳径。好读书是你的美德&#xff0c;读好书是你的选择&#xff0c;书好读是我们的承诺&#xff01;如果有心&#xff0c;不妨把一卷《网络…

Mac MySQL 数据库配置(关系型数据库管理系统)

本文已停止更新&#xff0c;点击此链接查看本文最新内容 &#xff01;&#xff01;&#xff01;前言 MySQL 关系型数据库管理系统。1、配置准备工作 1&#xff09;配置数据库准备工作 下载相关软件 mysql-5.7.21-1-macos10.13-x86_64.dmgmysql-workbench-community-6.3.10-maco…

SSM框架——Spring+SpringMVC+Mybatis的搭建教程

一&#xff1a;概述SSM框架在项目开发中经常使用到&#xff0c;相比于SSH框架&#xff0c;它在仅几年的开发中运用的更加广泛。 Spring作为一个轻量级的框架&#xff0c;有很多的拓展功能&#xff0c;最主要的我们一般项目使用的就是IOC和AOP。SpringMVC是Spring实现的一个Web层…

【java】兴唐课程第五节到第九节知识点总结

第九节 1、 代码&#xff1a;void readBook(String… bookNames) 表示不确定参数的个数&#xff0c;此时变量为一个数组。 2、当方法中的参数名称(如stuname)和属性名称相同时。 this.stuname表示属性 stuname表示参数。 3、主方法与所在的累无关&#xff0c;是一个程序的入口…

构建RHEL上的extmail

一、extmail_solutionz 1、ExtMail Solution 结构 ExtMail Solution 是一个基于优秀开源软件的电子邮件系统解决方案&#xff0c;核心部件包括了Postfix、Amavisd-new、ClamAV、ExtMail、ExtMan、Courier系列软件。是一个功能相对比较齐全的免费电子邮件系统。以下是其主要的特…