zoukankan      html  css  js  c++  java
  • tinyxml2库的使用--MFC工程

        在编写应用程序的时候,经常需要动态加载某些数据,这种情况下微软的ini文件是蛮好的选择,但是平台的通用性比较差,使用xml的话就比较强一点,但是解析比较复杂,型号有牛人已经开发出了直接读写xml的库,c++格式的,也就是我们今天说的tinyxml2

       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
  • 相关阅读:
    抽奖系统 random()
    JavaScript 稀奇的js语法
    Node初识笔记 1第一周
    vue 自定义指令
    vue 组件 单选切换控制模板 v-bind-is
    学习网址
    vue 组件 子向父亲通信用自定义方法用事件监听
    vue 组件 模板中根数据绑定需要指明路径并通信父
    vue 组件 模板input双向数据数据
    测试样式
  • 原文地址:https://www.cnblogs.com/dengxiaojun/p/4439443.html
Copyright © 2011-2022 走看看