利用TinyXml进行数据库的热更新
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进行数据库的热更新的更多相关文章
- unity游戏热更新
链接:https://pan.baidu.com/s/1ggWP0OF 第 1 章 : 热更新技术学习介绍 课时1:101-热更新技术学习介绍 11:55 什么是热更新? 举例来说 游戏上线后,玩家下 ...
- 热更新(一) 之Lua语法的学习
热更新 如热更新果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新打包,然后让玩家重新下载(浪费流量和时间,体验不好).热更新可以在不重新下载客户端的情况下,更新游戏的内容 ...
- Unity热更新技术整理
一.热更新学习介绍 1.什么是热更新 举例来说: 游戏上线后,玩家下载第一个版本(70M左右或者更大),在运营的过程中,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新 ...
- Spring Boot 利用 nginx 实现生产环境的伪热更新
当我们在服务器部署Java程序,特别是使用了 Spring Boot 生成单一 Jar 文件部署的时候,单一文件为我们开发单来的极大的便利性,保障程序的完整性.但同时对我们修改程序中的任何一处都带来重 ...
- Python 软件热更新
Python 软件热更新 本篇文章涉及技术知识如下: Redis threading 多线程 PyQt5 importlib 热更新 场景 咱们在平时运行一些长时间都会一直运行的软件(如:某些云同步软 ...
- MySQL数据库双机热备------主-主备份配置
MySQL数据库双机热备------主-主备份配置 实验环境: 主1数据库 192.168.1.1 centos6.5 x86_64 +MySQL5.5.35 主2数据库192.168.1.2 Wi ...
- 谁偷了我的热更新?Mono,JIT,iOS
前言 由于匹夫本人是做游戏开发工作的,所以平时也会加一些玩家的群.而一些困扰玩家的问题,同样也困扰着我们这些手机游戏开发者.这不最近匹夫看自己加的一些群,常常会有人问为啥这个游戏一更新就要重新下载,而 ...
- JSPatch热更新的利器.
如果用一句话来描述JSPatch,就是利用系统自带的JavaScriptCore.framework配合RunTime机制,进行实时的代码下载与运行.. 而且使用也很简单,启动,加载JS,运行... ...
- IOS热更新-JSPatch实现原理+Patch现场恢复
关于HotfixPatch 在IOS开发领域,由于Apple严格的审核标准和低效率,IOS应用的发版速度极慢,稍微大型的app发版基本上都在一个月以上,所以代码热更新(HotfixPatch)对于IO ...
随机推荐
- 使用Windows Server 2012+ 搭建VPN 简单 高效 稳定
前几天,在机缘巧合之下,买到了一台性能配置一般的腾讯云服务器(香港的),因为性能比较差,没啥太大用途,就想着试试搭建一个VPN,后来,经过多次尝试和查资料,总结出了一套几乎100%成功的教程,现在拿来 ...
- Unable to find 'struts.multipart.saveDir' property setting.
今天在项目开发中遇到如下问题 项目使用的是struts2 Unable to find 'struts.multipart.saveDir' property setting. 后来在网上查询特此记录 ...
- File字节流
1. File f = new File("文件路径") 注意:相对路径:非web项目的相对都是以项目为起点.(src/a/txt(建议) 绝对路径:f: ...
- sqlmap详细使用 [精简]
1. 基础用法: 一下./sqlmap.py 在kali和backtrack中使用sqlmap的时候,直接用:sqlmap ./sqlmap.py -u “注入地址” -v 1 –dbs // 列 ...
- 编写一个简单的Web Server
编写一个简单的Web Server其实是轻而易举的.如果我们只是想托管一些HTML页面,我们可以这么实现: 在VS2013中创建一个C# 控制台程序 编写一个字符串扩展方法类,主要用于在URL中截取文 ...
- Mac OS X 安装后的简单设置
让Mac拥有类似apt-get的功能--安装Homebrew Homebrew是一个包管理器,用于在Mac上安装一些OS X没有的UNIX工具(比如著名的wget). 国内下载地址:http://ww ...
- Python 基于TK 文本编辑器
#coding=utf-8 import sys,os import tkFileDialog from Tkinter import * from tkFont import Font print ...
- Hadoop和MapReduce初识
我们生活在大数据时代!!!微博.微信.云存储等大数据的需求,Hadoop由此诞生. 以下面部分数据为例: 1)Facebook存储着约100亿张照片,约1PB存储容量: 2)纽约证券交易所每天产生1T ...
- HTML5浏览器定位navigator.geolocation.getCurrentPosition
<!DOCTYPE html> <html> <body> <p id="demo">点击这个按钮,获得您的坐标:</p> ...
- ReactiveSwift源码解析(一) Event与Observer代码实现
ReactiveCocoa这个框架是做什么用的本篇博客就不做过多赘述了,什么是"响应式编程"也不多聊了,自行Google吧.本篇博客的主题是解析ReactiveCocoa框架中的核 ...