您的位置:首页 > 其它

用CMarkup类创建xml文件的方法

2012-06-26 18:27 197 查看
Markup.cpp和Markup.h文件内容在下一篇博客中

首先添加Markup.cpp和Markup.h到工程

在用使用xml的.cpp文件中添加头文件#include "Markup.h"

设置Markup.cpp的Project Setting 中c/c++在分类预编译的头文件中选择

“不使用预补偿页眉”

如果是在非MFC工程中使用类CMarkup

编译如果报错

fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include

解决方法:

#ifdef _WINDOWS_

#undef _WINDOWS_

#endif

编译如果报错

error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义

error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义

error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义

解决方法:

则设置工程Porject Setting中的Link,在分类input输入中的对象/库模块最前面添加Nafxcwd.lib Libcmtd.lib

在忽略库中填写LIBCMT uafxcwd.lib Libcmtd.lib

这样就能在非MFC工程中用了

现在要创建的xml文件如下:

<?xml version="1.0" ?>

<matrixs>

<matrix id="1" type="0" ip="192.168.16.64" port="5050" user="vorx" password="" serv_port="5700">矩阵</matrix>

<matrix id="5" type="0" ip="192.168.16.65" port="5050" user="vorx" password="" serv_port="6000">矩阵</matrix>

<matrix id="6" type="0" ip="192.168.16.66" port="5050" user="vorx" password="" serv_port="6100">矩阵</matrix>

</matrixs>



代码如下

利用类CMarkup新建一个xml文件
	//g_sFilefullPath.c_str()为要保存xml的路径,获取路径的方法在第六篇博客中
	if(GetFileAttributes(g_sFilefullPath.c_str()) == 0xffffffff) //文件不存在时
	{
		CMarkup xml;
		xml.SetDoc("<?xml version=\"1.0\" ?>\r\n");   
		xml.AddElem("matrixs");	
		xml.Save(g_sFilefullPath.c_str());
	}

//加载xml文件,这时如果用到遍历一定要注意指针当前定义的位置
	CMarkup xml;
	BOOL bLoadXml = FALSE;
	bLoadXml = xml.Load(g_sFilefullPath.c_str()); //加载xml文件
	if (bLoadXml)
	{
		xml.ResetMainPos();//将指针定义到第一个顶级标签的上一个位置<文本>
		xml.FindElem();//将将指针定义到第一个顶级标签
		while(xml.FindChildElem("matrix"))
		{
			int matrixID = (int)atoi(xml.GetChildAttrib("id"));
			if (m_InsertMatrixID == matrixID)
			{
				MessageBox("此ID已存在,请重新输入","提示",MB_OK);
				return;
			}
		}
		//遍历完后,指针在文件结尾,这时要将指针重新定位到开头才能进行下面的遍历
		xml.ResetMainPos();
		xml.FindElem();
		while(xml.FindChildElem("matrix"))
		{
			string matrixIP = xml.GetChildAttrib("ip");
			if (strcmp( m_InsertMatrixIP, matrixIP.c_str()) == 0)
			{
				MessageBox("此IP地址已存在,请重新输入","提示",MB_OK);
				return;
			}
		}
		xml.ResetMainPos();
		xml.FindElem();
		while(xml.FindChildElem("matrix"))
		{
			int matrixSerPort = (int)atoi(xml.GetChildAttrib("serv_port"));
			if (m_InsertServerPort == matrixSerPort)
			{
				MessageBox("此服务代理端口已存在,请重新输入","提示",MB_OK);
				return;
			}
		}
		//为xml文件添加子元素
		xml.AddChildElem( "matrix", "矩阵" );//在顶级标签下面添加子标签
		//设置属性
		xml.SetChildAttrib("id",m_InsertMatrixID);
		xml.SetChildAttrib("type",m_InsertType);
		xml.SetChildAttrib("ip",m_InsertMatrixIP);
		xml.SetChildAttrib("port",m_InsertMatrixPort);
		xml.SetChildAttrib("user",m_InsertMatrixUser);
		xml.SetChildAttrib("password",m_InsertMatrixPassword);
		xml.SetChildAttrib("serv_port",m_InsertServerPort);
		xml.Save(g_sFilefullPath.c_str());	
	}
//删除子节点
	CMarkup xml;
	xml.Load(g_sFilefullPath.c_str());
	xml.ResetMainPos();
	xml.FindElem();
	while (xml.FindChildElem("matrix"))
	{
		int idAttribute=(int)atoi(xml.GetChildAttrib("id"));
		if (idAttribute==nGetId)
		{
			xml.RemoveChildElem();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: