tinyxml2庫的使用--MFC工程

    在編寫應用程序的時候,常常須要動態加載某些數據,這種狀況下微軟的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
相關文章
相關標籤/搜索