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. 学习笔记TF020:序列标注、手写小写字母OCR数据集、双向RNN

    序列标注(sequence labelling),输入序列每一帧预测一个类别.OCR(Optical Character Recognition 光学字符识别). MIT口语系统研究组Rob Kass ...

  2. Java文件流应用:复制文件

    文件复制步骤 代码: package 文件流应用复制文件; import java.io.File; import java.io.FileInputStream; import java.io.Fi ...

  3. springmvc 添加@ResponseBody

    1.添加ResponseBody之后的话 返回字符串的时候 就是一个字符串. @RequestMapping(value = "/{bookId}/detail.do",metho ...

  4. Mybatis中如何查询时间段内的数据

    最后一个是正确的,前边的三个是可能遇到的坑,给大家展示一下,如果不需要的,可以直接跳到最后看: 有时候我们需要查询一张表内一段时间内操作的数据,大家很容易就想到了 between ? and ? 这个 ...

  5. ap.net core 教程(三) - 新建项目

    ASP.NET Core - 新建项目 在这一章,我们将讨论如何在Visual Studio中创建一个新项目. 只要你安装了Visual Studio 2015的.net core工具,您就可以开始构 ...

  6. CentOS 安装数据库笔记

    1.配置YUM源 # 下载mysql源安装包 shell.noarch.rpm # 安装mysql源 shell.noarch.rpm 检查mysql源是否安装成功 shell> yum rep ...

  7. 用html5调取谷歌地图获取位置

    function getmap(){ if(!navigator.geolocation) throw "Geolocation not supported"; var image ...

  8. String 类问题发现与解决

    1.在代码中出现:String t = null; t.length(); 执行后:控制台报:java.lang.NullPointerException 原因:Java中,null是一个关键字,用来 ...

  9. 学习总结------用JDBC连接MySQL

    1.下载MySQL的JDBC驱动 地址:https://dev.mysql.com/downloads/connector/ 为了方便,直接就选择合适自己的压缩包 跳过登录,选择直接下载 下载完成后, ...

  10. jqery 图片等 比例缩放

    后台添加加载图片的方法(从编辑器里为图上添加一个名为jzsmsimglightbox样式的类) public string GetHtmlImageUrlList(string sHtmlText) ...