📄 readconf.cpp
字号:
#include "ReadConf.h"
ReadConf* ReadConf::m_pInstance = NULL;
vector<confItem> ReadConf::m_vConfItem(0);
ReadConf::ReadConf()
{
}
ReadConf::~ReadConf()
{
m_vConfItem.clear();
}
ReadConf* ReadConf::getInstance()
{
if(m_pInstance == NULL)
m_pInstance = new ReadConf();
return m_pInstance;
}
void ReadConf::retrieve(xmlDocPtr doc, xmlNodePtr cur) {
xmlNodePtr curDetail;
cur = cur->xmlChildrenNode;
cur = cur->next;
confItem addConfItem;
memset(&addConfItem,0,sizeof(confItem));
//m_vConfItem.clear();
while(cur !=NULL)
{
curDetail = cur;
curDetail = curDetail->xmlChildrenNode;
while(curDetail != NULL){
if(curDetail->type == XML_ELEMENT_NODE)
{
xmlChar* id = xmlNodeListGetString(doc, curDetail->xmlChildrenNode, 1);
//memset(&addConfItem, 0, size(addConfItem)); //???
if(xmlStrcmp(curDetail->name, (const xmlChar *) "name") == 0){
memset(addConfItem.sItemName, 0, sizeof(addConfItem.sItemName));
if(NULL != id) strncpy(addConfItem.sItemName, (char *)id, MAX_ITEMNAMELEN);
}
if(xmlStrcmp(curDetail->name, (const xmlChar *) "value") == 0){
memset(addConfItem.sItemValue, 0, sizeof(addConfItem.sItemValue));
if(NULL != id) strncpy(addConfItem.sItemValue, (char *)id, MAX_ITEMVALUELEN);
m_vConfItem.push_back(addConfItem);
}
if(NULL != id) xmlFree(id);
//printf("name: %s\n", curDetail->name);
//printf("keyword: %s\n", id);
}
curDetail = curDetail->next;
}
cur = cur->next;
}
return;
}
bool ReadConf::parseDoc(const char *docname, const char *docType, CWriteDateLog& pLog)
{
if(NULL == docname) return false;
if(NULL == docType) return false;
if(&pLog == NULL)
return false;
xmlDocPtr doc=NULL;
xmlNodePtr cur=NULL;
int k=0;
try{
doc = xmlParseFile(docname);
if (doc == NULL )
{
pLog << TIME << "Platform config file not parsed successfully. " << END;
return false;
}
cur = xmlDocGetRootElement(doc);
if (cur == NULL)
{
pLog << TIME << "Empty Platform config file." << END;
xmlFreeDoc(doc);
return false;
}
if(strcmp(docType, "Interface")==0)
k=m_vConfItem.size();
retrieve(doc, cur);
xmlFreeDoc(doc);
//List the data
if(strcmp(docType, "Interface")==0)
{
pLog << TIME << "Read config file "<<docname<<END;
for(int i=k; i<m_vConfItem.size(); i++)
pLog << "\t" << m_vConfItem[i].sItemName << " : " << m_vConfItem[i].sItemValue << END;
pLog << TIME << "Read config file successfully!" << END;
}
return true;
} catch(...){
pLog << TIME <<"Read file "<<docname<<" error."<<END;
}
return false;
}
string ReadConf::getValue(const char *p_itemName)
{
if(NULL == p_itemName) return "";
if(strlen(p_itemName) < 1) return "";
for(int i=0; i < m_vConfItem.size(); i++)
{
if(strcmp(m_vConfItem[i].sItemName, p_itemName)==0)
{
if(strlen(m_vConfItem[i].sItemValue) > 0)
return (string)m_vConfItem[i].sItemValue;
else
return "";
}
}
return "";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -