C++ 加载.xml文件

///首先写一个ProductNameConfig.xml

<?xml version="1.0" encoding="GB2312" ?>
<Root>
    <Product>
<Parameter ProductID="CY" ProductName="棉纱" />
    </Product>
</Root>

///首先需要在头文件包含以下两个头文件:
#include "tinyxml.h"
#include "tinystr.h"

#define RETURN_OK 0
#define  RETURN_ERROR -1

class TiXmlElement;
class TiXmlNode;
class TiXmlDocument;

///创建一个DataSet类,下面直接写实现部分。
//类头文件中定义TiXmlDocument* pDoc;
//加载.xml文件
int CDataSet::LoadProductInfo()
{
char chMainPath[MAX_PATH + 1] = {0};
GetModuleFileName(NULL, chMainPath, MAX_PATH);
char *pos = strrchr(chMainPath, '\\');
*(pos + 1) = '\0';
std::string strTmpPath=chMainPath;
// GetCurrentDirectory(MAX_PATH,path);
strTmpPath+="ini\\ProductNameConfig.xml";


FILE* fp = fopen(strTmpPath.c_str(),"r");
if(fp ==NULL)
{
//LOG_TRACE(LOG_ERROR_LEVEL,"INIT","Please Check %s is Existing!",strTmpPath.c_str());
return RETURN_ERROR;
}
else
{
fclose(fp);
fp=NULL;
}


if(ParseConfigFile(strTmpPath.c_str()) == RETURN_ERROR)
{
//LOG_TRACE(LOG_ERROR_LEVEL,"INIT","ParseConfigFile Failed",strTmpPath.c_str());
return RETURN_ERROR;
}
return ROHONDB_OK;
}


int CDataSet::ParseConfigFile(const char* szFileName)
{
pDoc = new TiXmlDocument(szFileName);
bool bSuccess = pDoc->LoadFile();
if (!bSuccess)
{
//LOG_TRACE(LOG_ERROR_LEVEL,"PARSEFILE","Load File Failed");
delete pDoc;
pDoc = NULL;
return RETURN_ERROR;
}


//读取Root节点
TiXmlNode* RootNode = pDoc->FirstChild("Root");
TiXmlElement* pPluginElement = NULL;


if ((pPluginElement = RootNode->FirstChildElement("Product"))!= NULL)
{
if (ReadProductElement(pPluginElement) == RETURN_ERROR)
{
return RETURN_ERROR;
}
}
else
{
//LOG_TRACE(LOG_ERROR_LEVEL,"PARSEFILE","Product Element is not finded");
return RETURN_ERROR;
}


return RETURN_OK;
}

int CDataSet::ReadProductElement(TiXmlElement* pPLuginElement)
{
ASSERT(pPLuginElement);
TiXmlElement* pParameter=NULL;
for (pParameter=pPLuginElement->FirstChildElement("Parameter");pParameter!=NULL;pParameter=pParameter->NextSiblingElement())
{
m_mapProductNameField.insert(std::pair<std::string,std::string>(pParameter->Attribute("ProductID"),pParameter->Attribute("ProductName")));
}


if (m_mapProductNameField.size() ==0)
{
///LOG_TRACE(LOG_ERROR_LEVEL,"REDPRODUCT","Product Element size is zero");
return RETURN_ERROR;
}


return RETURN_OK;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值