C++读取xml配置文件算法

配置文件信息如下:

<PESConfig>
    <datetime startDate="20120714" startTime="141215" enable="1" />
    <quantity quantity="1000000" enable="0" />
    <beforeDay days="20" enable="0" />
</PESConfig>

源代码:
/***********************************************************************
 *版权声明(c) 2010-2013, Mronginfo Ltd. 所有权利保留.                  
 *                                                                    
 * 本文件属于Mronginfo Ltd产品的一部分,版权归Mronginfo Ltd所有,        
 * 包括但不限于代码、注释及设计文档、会议记录等等。                      
 *                                                                    
 * 本文件未经授权不得用于任何其它用途。                                  
 * 作者:甘全福												
 * 创建日期:2013-7-12
 ***********************************************************************/
 
#pragma once
#include"Persistable.h"
#include "memento.h"
#include <vector>
#include <string>
using namespace std;
using namespace xml_api;
class CCFGDateTime:public Persistable
{
public:
	CCFGDateTime(void);
	virtual ~CCFGDateTime(void);
 
public:
 
	//加载配置信息
	virtual bool LoadState( Memento* m );
 
	//保存配置信息
	virtual bool SaveState( Memento* m );
 
public:	
	string       m_strStartDate;//筛选历史平仓交易记录的开始日期
	
	string		m_strStartTime;//筛选历史平仓交易记录的开始时间
 
	bool   m_isEnable;     //表示是否作为筛选条件
};
 
//CCFGDateTime对象容器
typedef vector<CCFGDateTime> Datetimes;

#include "xmlDateTime.h"
 
 
CCFGDateTime::CCFGDateTime(void)
{
}
 
 
CCFGDateTime::~CCFGDateTime(void)
{
}
 
//加载配置信息
bool CCFGDateTime::LoadState( Memento* m )
{
	m_strStartDate = m->GetString("startDate");
	m_strStartTime = m->GetString("startTime");	
	m_isEnable = m->GetBoolean("enable");
 
	return true;
 
}
 
//保存配置信息
bool CCFGDateTime::SaveState( Memento* m )
{
	 m->SetString("startDate", m_strStartDate);
	 m->SetString("startTime",m_strStartTime);	
	 m->SetBoolean("enable", m_isEnable);
 
	return true;
}


/***********************************************************************
 *版权声明(c) 2010-2013, Mronginfo Ltd. 所有权利保留.                  
 *                                                                    
 * 本文件属于Mronginfo Ltd产品的一部分,版权归Mronginfo Ltd所有,        
 * 包括但不限于代码、注释及设计文档、会议记录等等。                      
 *                                                                    
 * 本文件未经授权不得用于任何其它用途。                                  
 * 作者:甘全福												
 * 创建日期:2013-7-12
 ***********************************************************************/
 
#pragma once
#include"Persistable.h"
#include "memento.h"
#include <vector>
#include <string>
using namespace std;
using namespace xml_api;
 
class CCFGBeforeDay:public Persistable
{
public:
	CCFGBeforeDay(void);
	virtual ~CCFGBeforeDay(void);
 
	//加载配置信息
	virtual bool LoadState( Memento* m );
 
	//保存配置信息
	virtual bool SaveState( Memento* m );
 
public:	 
	int m_nDays;  //筛选历史平仓交易记录的天数
	bool  m_isEnable;  //表示是否作为筛选条件
 
};
 
typedef vector<CCFGBeforeDay> BeforeDays;


#include "xmlBeforeDay.h"
 
 
CCFGBeforeDay::CCFGBeforeDay(void)
{
}
 
 
CCFGBeforeDay::~CCFGBeforeDay(void)
{
}
 
bool CCFGBeforeDay::LoadState( Memento* m )
{
	m_nDays = m->GetInteger("days");
	m_isEnable = m->GetBoolean("enable");
 
	return true;
}
 
bool CCFGBeforeDay::SaveState( Memento* m )
{
	m->SetInteger("days", m_nDays);
	m->SetBoolean("enable", m_isEnable);
 
	return true;
}



/***********************************************************************
 *版权声明(c) 2010-2013, Mronginfo Ltd. 所有权利保留.                  
 *                                                                    
 * 本文件属于Mronginfo Ltd产品的一部分,版权归Mronginfo Ltd所有,        
 * 包括但不限于代码、注释及设计文档、会议记录等等。                      
 *                                                                    
 * 本文件未经授权不得用于任何其它用途。                                  
 * 作者:甘全福											
 * 创建日期:2013-7-12
 ***********************************************************************/
 
#include <vector>
#pragma once
#include"Persistable.h"
#include "memento.h"
#include <string>
using namespace std;
using namespace xml_api;
class CCFGQuantity:public Persistable
{
public:
	CCFGQuantity(void);
	virtual ~CCFGQuantity(void);
 
 
	//加载配置信息
	virtual bool LoadState( Memento* m );
 
	//保存配置信息
	virtual bool SaveState( Memento* m );
 
public:
	int m_nQuantity;     //筛选历史平仓交易记录的数量
	bool m_isEnable;	  //表示是否作为筛选条件
 
};
 
//CCFGQuantity对象容器
typedef vector<CCFGQuantity> Quantitys;
#include "xmlQuantity.h"
 
 
CCFGQuantity::CCFGQuantity(void)
{
}
 
 
CCFGQuantity::~CCFGQuantity(void)
{
}
 
bool CCFGQuantity::LoadState( Memento* m )
{
	m_nQuantity = m->GetInteger("quantity");
	m_isEnable = m->GetBoolean("enable");
 
	return true;
}
 
bool CCFGQuantity::SaveState( Memento* m )
{
	m->SetInteger("quantity", m_nQuantity);
	m->SetBoolean("enable", m_isEnable);
 
	return true;
}



#pragma once
#include "xmlDateTime.h"
#include "xmlBeforeDay.h"
#include "xmlQuantity.h"
class CConfig:public Persistable
{
protected:
	CConfig(void);
	~CConfig(void);
public:
 
	//加载配置信息
	virtual bool LoadState( Memento* m );
 
	//保存配置信息
	virtual bool SaveState( Memento* m );
 
	//单例方法
	static CConfig & Instance();
 
public:
 
	Datetimes m_dateTimes;  	//保存datatime元素集合
	BeforeDays m_beforeDays;    //保存beforeDay 元素集合
	Quantitys  m_quantitys;     //保存quantity元素集合
 
 
};
 
#include "Config.h"
 
 
CConfig::CConfig(void)
{
}
 
 
CConfig::~CConfig(void)
{
}
 
//加载配置信息
bool CConfig::LoadState( Memento* m )
{
	m_dateTimes.clear(); //防止多次反序列化之后,里面元素增加
	m_quantitys.clear();
	m_beforeDays.clear();
 
	int childCount = 0; //子元素总数
	childCount = m->GetChildCount();
	for (int i = 0; i < childCount; ++i)
	{	
		Memento *mo = m->GetChild(i);
		string name = mo->GetName();
		if ("datetime" == name)
		{
			CCFGDateTime datetime;
			m_dateTimes.push_back(datetime);
			(--m_dateTimes.end())->LoadState(mo); 
		}
		
		if ("quantity" == name)
		{
			CCFGQuantity quantify;
			m_quantitys.push_back(quantify);
			(--m_quantitys.end())->LoadState(mo);
		}
 
 
		if ("beforeDay" == name)
		{
			CCFGBeforeDay beforeDay;
			m_beforeDays.push_back(beforeDay);
			(--m_beforeDays.end())->LoadState(mo);
		}
	}
	
	return true;
}
 
 
 CConfig & CConfig::Instance()
{
	static CConfig instance;
	return instance;
 
}
 
//保存配置信息
bool CConfig::SaveState( Memento* m )
{
	m->SetName("PESConfig");
	for (int  i = 0; i < m_dateTimes.size(); ++i)
	{
		Memento *mo = m->CreateChild("datetime");
		m_dateTimes[i].SaveState(mo);
	}
 
	for (int i = 0; i < m_quantitys.size(); ++i)
	{
		Memento *mo = m->CreateChild("quantity");
		m_quantitys[i].SaveState(mo);
	}
 
 
	for (int i = 0; i < m_beforeDays.size(); ++i)
	{
		Memento *mo = m->CreateChild("beforeDay");
		m_beforeDays[i].SaveState(mo);
	}
	
	return true;

}


//测试算法
#include
 <iostream>  //标准输入输出流 #include "Utils.h" #include "Config.h" #include "stdio.h" #include "IPerfomanceEvalShare.h" #include <Windows.h> using namespace xml_api; using namespace std;//标准命名空间 #define ARY_SIZE 10 int main() { Utils utils; /*CCFGDateTime datetime; datetime.m_strStartDate = "20120714"; datetime.m_strStartTime = "141215"; datetime.m_isEnable = true; CConfig::Instance().m_dateTimes.push_back(datetime); CCFGQuantity quantify; quantify.m_isEnable = false; quantify.m_nQuantity = 1000000; CConfig::Instance().m_quantitys.push_back(quantify); CCFGBeforeDay berforeDay; berforeDay.m_nDays = 20; berforeDay.m_isEnable = false; CConfig::Instance().m_beforeDays.push_back(berforeDay); utils.Serialize("PESConfig.xml", &CConfig::Instance());*/ utils.DeserializeFromFile("PESConfig.xml", &CConfig::Instance()); if(CConfig::Instance().m_dateTimes[0].m_isEnable) { cout << "It is true" << endl; } if (! CConfig::Instance().m_beforeDays[0].m_isEnable) { cout << "It is false" << endl; } if (!CConfig::Instance().m_quantitys[0].m_isEnable) { cout << "It is false" << endl; } int wait;  cin >> wait; return 0; }

转载于:https://www.cnblogs.com/ganquanfu2008/p/3187931.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值