TinyXml库比较小,但功能较为完善,挺适合用来读取小块的xml文件;

我写了几个利用TinyXml读取和保存数据的例子,大家可以参考使用;

主要是为了热更新配置所做的一些函数应用;

 //开始热更
void CLocalConfig::HotUpdateXmlCfg(string filePath)
{
// 定义一个TiXmlDocument类变量
TiXmlDocument Doc;
mapTaskInfoCfg mpTaskInfoConfig;
map<int,int> mpInsert;
if(!Doc.LoadFile(filePath.c_str()))
{
return;
} GetAttributeByTaskXml(Doc,,mpTaskInfoConfig);
for(itmapTaskInfoCfg itr = mpTaskInfoConfig.begin();itr != mpTaskInfoConfig.end(); ++itr)
{
TaskDetail TaskInfo = itr->second;
if(TaskInfo.GetNewAble() || TaskInfo.GetModifyAble())
{
//insert 插入数据库
if(CDbManager::Instance()->InsertTaskDetail(NULL,TaskInfo))
{
//数据库热更成功,插入到更新map
mpInsert.insert(make_pair(TaskInfo.GetTaskId(),TaskInfo.GetTaskId()));
}
continue;
}
}
//更新插入的数据
if (mpInsert.size() != )
{
//更新刚刚热更成功的xml表
UpdateAttributeByTaskXml(Doc,,mpInsert);
}
//保存xml表
Doc.SaveFile(filePath.c_str());
} //读取xml表格内容
void CLocalConfig::GetAttributeByGrownBagsXml(TiXmlDocument &stDoc,int Flag/*层级*/,mapTaskInfoCfg &mpTaskInfo)
{
TiXmlElement* pNowElement = stDoc.RootElement(); //root节点
//循环Flag次,以指向需要的节点层级
while(Flag--){
pNowElement = pNowElement->FirstChildElement(); //指向下一个
}
while ( pNowElement ) {
TiXmlAttribute* attributeOfStudent = pNowElement->FirstAttribute(); //获得每一级的各种属性
TASK_INFO_DETAIL Config;
ZeroMemory(&Config, sizeof(TASK_INFO_DETAIL));
while ( attributeOfStudent ) {
switch(string(attributeOfStudent->Name()))
{
case GROWN_BAGS_CFG_XML_ID:
{
//数字直接赋值
Config.m_iID= atoi(attributeOfStudent->Value());
break;
}
case GROWN_BAGS_CFG_XML_ID:
{
//字符串直接拷贝
memcpy(Config.m_strName ,attributeOfStudent->Value(),strlen(attributeOfStudent->Value())+);
break;
}
default:
break;
}
std::cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << std::endl;//打印当前的数据看看
attributeOfStudent = attributeOfStudent->Next();//指向下一个元素
}
mpTaskInfo[Config.m_iID] = Config;
pNowElement = pNowElement->NextSiblingElement();//指向下一个同级节点
}
} //更新xml节点元素
void CLocalConfig::UpdateAttributeByTaskXml(TiXmlDocument &stDoc,int Flag,map<int,int> &mpTaskUpdate)
{
TiXmlElement* pNowElement = stDoc.RootElement(); //root
//循环Flag次,以指向需要的节点层级
while(Flag--){
pNowElement = pNowElement->FirstChildElement(); //指向下一个
}
while ( pNowElement ) {
TiXmlAttribute* attributeOfStudent = pNowElement->FirstAttribute(); //获得每一级的各种属性
while ( attributeOfStudent ) {
if(string(attributeOfStudent->Name())==TASKINFO_CFG_XML_ID)
{
//看看是不是这个ID
int iTaskId= atoi(attributeOfStudent->Value());
map<int,int>::iterator itr = mpTaskUpdate.find(iTaskId);
if(itr == mpTaskUpdate.end())
{
break;
}
}
else if(string(attributeOfStudent->Name())==TASKINFO_CFG_XML_MODIFY)
{
attributeOfStudent->SetValue("");//设置属性为0,代表已经更新了
}
else if(string(attributeOfStudent->Name())==TASKINFO_CFG_XML_NEW)
{
attributeOfStudent->SetValue("");//设置属性为0,代表已经更新了
}
else
{ }
attributeOfStudent = attributeOfStudent->Next();//指向下一个元素
}
pNowElement = pNowElement->NextSiblingElement();//指向下一个同级节点
}
}

利用TinyXml进行数据库的热更新的更多相关文章

  1. unity游戏热更新

    链接:https://pan.baidu.com/s/1ggWP0OF 第 1 章 : 热更新技术学习介绍 课时1:101-热更新技术学习介绍 11:55 什么是热更新? 举例来说 游戏上线后,玩家下 ...

  2. 热更新(一) 之Lua语法的学习

    热更新 如热更新果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新打包,然后让玩家重新下载(浪费流量和时间,体验不好).热更新可以在不重新下载客户端的情况下,更新游戏的内容 ...

  3. Unity热更新技术整理

    一.热更新学习介绍 1.什么是热更新 举例来说: 游戏上线后,玩家下载第一个版本(70M左右或者更大),在运营的过程中,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新 ...

  4. Spring Boot 利用 nginx 实现生产环境的伪热更新

    当我们在服务器部署Java程序,特别是使用了 Spring Boot 生成单一 Jar 文件部署的时候,单一文件为我们开发单来的极大的便利性,保障程序的完整性.但同时对我们修改程序中的任何一处都带来重 ...

  5. Python 软件热更新

    Python 软件热更新 本篇文章涉及技术知识如下: Redis threading 多线程 PyQt5 importlib 热更新 场景 咱们在平时运行一些长时间都会一直运行的软件(如:某些云同步软 ...

  6. MySQL数据库双机热备------主-主备份配置

    MySQL数据库双机热备------主-主备份配置 实验环境: 主1数据库 192.168.1.1 centos6.5 x86_64 +MySQL5.5.35 主2数据库192.168.1.2  Wi ...

  7. 谁偷了我的热更新?Mono,JIT,iOS

    前言 由于匹夫本人是做游戏开发工作的,所以平时也会加一些玩家的群.而一些困扰玩家的问题,同样也困扰着我们这些手机游戏开发者.这不最近匹夫看自己加的一些群,常常会有人问为啥这个游戏一更新就要重新下载,而 ...

  8. JSPatch热更新的利器.

    如果用一句话来描述JSPatch,就是利用系统自带的JavaScriptCore.framework配合RunTime机制,进行实时的代码下载与运行.. 而且使用也很简单,启动,加载JS,运行... ...

  9. IOS热更新-JSPatch实现原理+Patch现场恢复

    关于HotfixPatch 在IOS开发领域,由于Apple严格的审核标准和低效率,IOS应用的发版速度极慢,稍微大型的app发版基本上都在一个月以上,所以代码热更新(HotfixPatch)对于IO ...

随机推荐

  1. QUICK-AP + BETTERCAP 替换局域网内其他用户的下载文件为自定义文件

    环境需求 :kali系统 , .0版本 :quick-ap :bettercap :bettercap-proxy-modules :...... 主要环境搭建 目的:替换局域网用户的下载文件,变为我 ...

  2. poj3417

    poj3417 题意 给出一颗 n 个节点, n - 1 条边的树,再加上 m 条新边,允许删掉树边和新边各一条,问能使树分为两部分的方案数. 分析 在树的基础上加上不重复的新边一定会构成环,那么考虑 ...

  3. chrome调试技巧

    1.开始调试:右键审查元素 2.按钮功能: 调出控制台: 切换开发环境全屏还是嵌入: 清空当前显示: 将压缩 js 文件格式化缩进规整的文件: 3.常用页面功能: 查看.编辑(双击)HTML: 查看选 ...

  4. Spring+SpringMVC+MyBatis深入学习及搭建(七)——MyBatis延迟加载

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6953005.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(六)——My ...

  5. 如何同时完成多个ajax之后再执行某个方法 ? 使用$.when().done();

    jQuery中的$.when()方法比较复杂,这里不作全面讲解,只写一个同时完成多个ajax请求后执行操作的方法. 有时候我们需要等待多个ajax执行完以后,再执行某个操作. 写法如下: $.when ...

  6. sqlserver 游标写法

    1.简单游标 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 declare m_cursor cursor scroll for select  Address,People ...

  7. Facebook开源Zstandard新型压缩算法代替Zlib 简单使用

    简介 Zstandard(缩写为Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法.Zstandard在设计上与DEFLATE(.zip.gzip)算法有着差不多的压缩比 ...

  8. R语言重要数据集分析研究——搞清数据的由来

    搞清数据的由来 作者:李雪丽 资料来源:百度百科

  9. [平衡树] mingap

    时间限制: 1 Sec  内存限制: 128 MB提交: 18  解决: 9 题目描述 实现一种数据结构,维护以下两个操作: (1) I x :加入元素 x : (2) M :输出当前表中相差最小的两 ...

  10. oracle sql语句跟踪及性能分析工具实现

    在网上找了一大圈,没找着合适的工具来跟踪oracle一段时间的sql. 我们的场景是打算自动化跑遍所有场景(rft)+fiddler跟踪请求+后端跟踪sql,根据结果去分析慢的请求和sql,本来awr ...