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

📄 xmldoc.cpp

📁 跨操作系统的微型中间件
💻 CPP
字号:
#include "XMLDoc.h"

#include <memory.h>
#include <MyAssert.h>

//创建XML文档
XMLDoc* CreateXMLDoc(const char* v_FileName,const char* v_RootNodeName)
{
	FILE* fp = fopen(v_FileName,"w");
	if (fp != NULL)
	{
		string s_Content = XML_HEADLINE;
		s_Content += "<";
		s_Content += v_RootNodeName;
		s_Content += "></";
		s_Content += v_RootNodeName;
		s_Content += ">\n";		
		fwrite(s_Content.c_str(),1,s_Content.length(),fp);
		fclose(fp);
		XMLDoc* pDoc = new XMLDoc(v_FileName);
		if (pDoc != NULL)
			return pDoc;
	}
	return NULL;
}

XMLDoc::XMLDoc(const char* v_FileName)
{
	Assert(v_FileName);
	m_FileName = v_FileName;
	m_RootNode = NULL;
}

XMLDoc::XMLDoc()
{
	m_FileName = "";
	m_RootNode = NULL;
}

XMLDoc::~XMLDoc()
{
	delete m_RootNode;
}

//打开XML文档
Bool XMLDoc::LoadXMLDoc()
{
	if(m_FileName == "" ) return FALSE;

	m_strBuffer = "";
	FILE* fp = fopen(m_FileName.c_str(),"r");
	if (fp != NULL)
	{
		fseek(fp,0L,SEEK_END);
		size_t len = ftell(fp);
		fseek(fp,0L,SEEK_SET);
		char* m_cBuffer = new char[len + 1];
		memset(m_cBuffer,0,len+1);
		fread(m_cBuffer,1,len+1,fp);
		fclose(fp);
		m_strBuffer = m_cBuffer;
		delete[] m_cBuffer;		
		delete m_RootNode;
		m_Useable = TRUE;
		m_RootNode = NULL;
		return TRUE;
	}
	return FALSE;
}

Bool XMLDoc::LoadXML( const char * v_str )
{
	Assert(v_str);
	m_strBuffer = v_str;
	m_Useable = TRUE;
	m_RootNode = NULL;
	return TRUE;
}
//取得根节点
XMLNode* XMLDoc::GetRootNode(const char* v_Name)
{
	Assert(v_Name);
	if (m_Useable == FALSE)
		return NULL;
	if (m_RootNode == NULL)
	{
		string sStart = "<";
		sStart += v_Name;
		string sEnd = "</";
		sEnd += v_Name;
		sEnd += ">";
		Int32 iStart = m_strBuffer.find(sStart);
		Int32 iEnd = m_strBuffer.find(sEnd);
		if (iEnd < 0)
			return NULL;
		iEnd = iEnd + sEnd.length();
		string sNodeText = m_strBuffer.substr(iStart,iEnd-iStart);
		m_RootNode = new XMLNode(sNodeText.c_str(),0);
	}
	return m_RootNode;
}

//保存文档
Bool XMLDoc::SaveFile()
{
	if(m_FileName == "" ) return FALSE;

	FILE *fp = fopen(m_FileName.c_str(),"w");
	if (fp != NULL)
	{
		char s_HEAD[] = XML_HEADLINE;
		string s_XmlContent = m_RootNode->GetNodeText();
		Int32 len = strlen(s_HEAD) + s_XmlContent.length() + 1;
		char* Buffer = new char[len];
		memset(Buffer,0,len);
		strcat(Buffer,s_HEAD);
		strcat(Buffer,s_XmlContent.c_str());
		fwrite(Buffer,1,len,fp);
		fclose(fp);
		delete[] Buffer;
		return TRUE;
	}
	return FALSE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -