tinyxml2库的使用--MFC工程
2015-04-19 16:56
183 查看
在编写应用程序的时候,经常需要动态加载某些数据,这种情况下微软的ini文件是蛮好的选择,但是平台的通用性比较差,使用xml的话就比较强一点,但是解析比较复杂,型号有牛人已经开发出了直接读写xml的库,c++格式的,也就是我们今天说的tinyxml2
tinyxml2主要有两个文件,如下
使用的时候把他门加入自己的应用程序,如下
然后在相应的头文件中导入该库,如下
然后我定义了一种xml目录结构,如下
使用该库加载这个文件的时候,先要装载文件,然后轮询元素,如下
首先加载根节点,然后依次轮询子节点
这样就可以将xml文件元素加载到应用程序中,接下来是修改元素,主要是讲get方法换成了set方法,如下
注意最后的savefile,保证自己的应用程序具有写权限,某些平台下需要打开uac控制,应用程序界面如下
老规矩上工程代码
tinyxml2主要有两个文件,如下
使用的时候把他门加入自己的应用程序,如下
然后在相应的头文件中导入该库,如下
#include "tinyxml2.h" using namespace tinyxml2;
然后我定义了一种xml目录结构,如下
<?xml version="1.0" encoding ="utf-8"?> <messages> <button_messages> <button> <name>help</name> <promptmessage>显示帮助信息</promptmessage> <serialSendString>help</serialSendString> </button> <button> <name>list</name> <promptmessage>显示命令列表</promptmessage> <serialSendString>list</serialSendString> </button>
使用该库加载这个文件的时候,先要装载文件,然后轮询元素,如下
//加载文件 XMLError load = configXmlFile.LoadFile(fileName); if(load != XML_SUCCESS) { MessageBox("文件加载失败","提示",MB_OK); configFileLoadOk = false; return; } //文件加载成功 XMLElement* pElement; XMLElement* hRoot; //加载根节点 hRoot = configXmlFile.RootElement(); if(!hRoot) { MessageBox("根节点错误","提示",MB_OK); return; }
首先加载根节点,然后依次轮询子节点
//获取全部button数据 do { //获取数据 nameString = pElement->FirstChildElement("name")->GetText(); promptMessage = pElement->FirstChildElement("promptmessage")->GetText(); serialSendString = pElement->FirstChildElement("serialSendString")->GetText(); if(nameString) buttonName->Add(nameString); buttonPromptmessage->Add(promptMessage); buttonSerialSendString->Add(serialSendString); buttonIndexCount++; pElement = pElement->NextSiblingElement();//切换到下一个子元素 } while (pElement);
这样就可以将xml文件元素加载到应用程序中,接下来是修改元素,主要是讲get方法换成了set方法,如下
XMLElement* pElement; XMLElement* hRoot; //加载根节点 hRoot = configXmlFile.RootElement(); if(!hRoot) { MessageBox("根节点错误","提示",MB_OK); return; } //加载快捷按键信息 pElement = hRoot->FirstChildElement("button_messages")->FirstChildElement("button");//寻找一个子元素 buttonIndexCount = 0; //获取全部button数据 do { pElement->FirstChildElement("name")->SetText(buttonName->GetAt(buttonIndexCount)); pElement->FirstChildElement("promptmessage")->SetText(buttonPromptmessage->GetAt(buttonIndexCount)); pElement->FirstChildElement("serialSendString")->SetText(buttonSerialSendString->GetAt(buttonIndexCount)); buttonIndexCount++; pElement = pElement->NextSiblingElement();//切换到下一个子元素 } while (pElement); int i = ((CComboBox*)(GetDlgItem(IDC_COMBO_CONFIG_FILE_ITEM)))->GetCurSel(); char* fileName = (char*)malloc(sizeof(char)*255); fileName = strPath.GetAt(i).GetBuffer(); configXmlFile.SaveFile(fileName);
注意最后的savefile,保证自己的应用程序具有写权限,某些平台下需要打开uac控制,应用程序界面如下
老规矩上工程代码
http://download.csdn.net/detail/dengrengong/8610017
相关文章推荐
- VC工程-设置里的使用MFC作为共享的DLL和使用MFC作为静态链接库 二者区别
- MFC工程里面使用C文件
- 在MFC工程中使用ICE
- VC6工程迁移到VC2008 SP1中,使用MFC 9.0静态链接后运行错误的解决办法
- 非MFC工程中使用MFC库
- tip:如何在MFC工程中使用Console调试程序(Visual Studio 2012)
- 笔记:vs使用cmake自动添加opencv和boost(MFC使用cmake建立工程)
- 非MFC工程使用CString
- 使用vs2010创建MFC工程后,vs2010的bug,不知道你们有没有
- 基于MFC对话框工程如何使用另一工程下的对话框
- MFC的DLL库工程中使用CWebBrowser2控件
- mfc 在同一个工程中使用多个资源文件
- 使用VS2010创建MFC工程,并添加VTK引用
- 非MFC工程中使用MFC库
- MFC工程使用printf()
- VS2012创建ATL工程及使用MFC测试COM组件
- 使用自定义图标的MFC工程因原图标文件丢失无法building的解决办法
- 非MFC工程使用MFC库时的问题及解决办法
- MFC工程中导入使用已有的.h文件和.cpp文件
- Win32工程中使用MFCdll的解决方法