在編寫應用程序的時候,常常須要動態加載某些數據,這種狀況下微軟的ini文件是蠻好的選擇,可是平臺的通用性比較差,使用xml的話就比較強一點,可是解析比較複雜,型號有牛人已經開發出了直接讀寫xml的庫,c++格式的,也就是咱們今天說的tinyxml2c++
tinyxml2主要有兩個文件,以下spa
使用的時候把他門加入本身的應用程序,以下.net
而後在相應的頭文件中導入該庫,以下code
#include "tinyxml2.h" using namespace tinyxml2;
而後我定義了一種xml目錄結構,以下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>
使用該庫加載這個文件的時候,先要裝載文件,而後輪詢元素,以下blog
//加載文件 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; }
首先加載根節點,而後依次輪詢子節點utf-8
//獲取所有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控制,應用程序界面以下get
老規矩上工程代碼io
http://download.csdn.net/detail/dengrengong/8610017