读取默认配置管理类(XML)

本文介绍了使用XML文件进行配置管理的方法,包括如何通过自定义类读取和写入XML节点值,以及如何将XML配置信息与应用程序界面进行同步。通过实例展示了如何使用TinyXML库实现基本的XML文件读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "stdafx.h"
#include "tinyxml.h"//去网上下载tinyxml等5个有关的头文件和源文件
#include "tinystr.h"

class CXmlOper
{
public:
     CXmlOper(CString FileName);//FileName:是配置文件文件名,初始化函数可看到是默认保存路径
     ~CXmlOper();

     CString ReadNodeValue(CString NodeName);//NodeName是XML标示节点名字(<str><\str>)
    //自然返回的是(<str><\str>)里面的信息
     int WriteNodeValue(CString NodeName,CString Value);
     int  savefile();

private:
     TiXmlDocument* m_pDoc;//TiXmlDocument是tinyxml中的一个类
}


//================================源文件================
#include "stdafx.h"
#include"CXmlOper.h"
CXmlOper::CXmlOper(CString FileName)
{
     m_pDoc= new  TiXmlDocument(".\\"+FileName);//指针指向FileNameXML文件,该文件必须事先存在,配置好!。。。
}

 CString  CXmlOper::ReadNodeValue(CString NodeName)
{
   TiXmlElement* root = m_pDoc->RootElement();// root 获取根节点
  TiXmlElement* node = root->FirstChildElement();//获取根节点下第一个子节点的名字
  while(node)//这里以两层的XML节点为例,所以两个while判断,具体多少层,按具体情况而定
  {
        TiXmlElement*  subnode = node->FirstChildElement();
        while(subnode)
         {
             if(subnode->Value()==NodeName)
            return subnode->GetText();//返回
             subnode = subnode->NextSiblingElement();
          }
          node = node->NextSiblingElement();
   }
    return  "";
}
//====================================================
int CXmlOper::WriteNodeValue(CString NodeName,CString Value)//此函数只写到内存m_pDoc,要想写到文件中,还需要调用保存函数
{
   TiXmlElement* root = m_pDoc->RootElement();// root 获取根节点
  TiXmlElement* node = root->FirstChildElement();//获取根节点下第一个子节点的名字
  while(node)//这里以两层的XML节点为例,所以两个while判断,具体多少层,按具体情况而定
  {
        TiXmlElement*  subnode = node->FirstChildElement();
        while(subnode)
         {
             if(subnode->Value()==NodeName)
         {
             TiXmlText* m_text = new TiXmlText(Value);
                    subnode->clear();//先清掉原节点内容,再给副新值
                    subnode->LinkEndChild(m_text);
                     return 0;
              }
             subnode = subnode->NextSiblingElement();
       }
          node = node->NextSiblingElement();
   }
   return -1;
   }
//===================
int  CXmlOper::savefile()
{
       if(m_pDoc)
          m_pDoc->SaveFile();
       else
           return -1;
  return 0;
}

//========================================================简单应用该类================================================================

1.#define ConfigFile  "DBTool.xml"//宏定义配置文件名

2. CXmlOper*  m_xml;//在class  CDBToolDlg中似有声明

   void  GetNodeValue();//用于读取XML默认配置,并初始化控件

3.窗口初始化时 m_xml = new  CXmlOper(ConfigFile);

    GetNodeValue();

4.void CDBToolDlg::On,。。()//保存所有配置信息(以下简单举例)

{

     m_xml = new CXmlOper(ConfigFile);//其实就是打开相应的配置文件

     updata();//这是自己写的一个函数,目的使类的成员变量和界面上的保持一致

     //====================以下是把ip写入,有点点不同===============

     BYTE  nFileld0,nFileld1,nFileld2,nFileld3;

     ip_ctr.GetAddress(nFileld0,nFileld1,nFileld2,nFileld3);//CIPAddressCtrl  ip_ctr(这是ip控件的控制变量)

     CString ip;

     ip.Format("%d.%d.%d.%d",nFileld0,nFileld1,nFileld2,nFileld3);设置字符串格式

     m_xml->WriteNodeValue("IP",ip);//意思是节点IP的text是ip的字符窜

//==============================

     m_xml->WriteNodeValue("port",port);

    .............

     m_xml->savefile();//不能漏

}

//====================================

void CDBToolDlg::GetNodeValue()

{

     m_xml = new CXmlOper(ConfigFile);//其实就是打开相应的配置文

     BYTE  nFileld0,nFileld1,nFileld2,nFileld3;

     ip_ctr.GetAddress(nFileld0,nFileld1,nFileld2,nFileld3);//CIPAddressCtrl  ip_ctr(这是ip控件的控制变量)

     CString ip2;

     ip2.Format("%d.%d.%d.%d",nFileld0,nFileld1,nFileld2,nFileld3);设置字符串格式

     ip2 = m_xml->ReadNodeValue("IP");//XML文件IP节点的内容读入ip2

     this->GetDlgItem(IDC_IPADDRESS1)->SetWindowText(ip2);//这样就能设置界面上的ip为XML中的默认值了

//====================其他设置比较简单,不说了

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值