首页 技术 正文
技术 2022年11月11日
0 收藏 914 点赞 4,095 浏览 2687 个字

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();//指向下一个同级节点
}
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,500
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,914
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,747
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,504
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,142
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,306