⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readconf.cpp

📁 Web URL 解析程序服务器端
💻 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 + -