Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2095874
  • 博文数量: 909
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 12260
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-06 20:50
文章分类

全部博文(909)

文章存档

2008年(909)

我的朋友

分类:

2008-05-06 22:33:18

一起学习
一个基于MFC的XML封装类 CXml

作者:长沙理工大学 王嘉

下载源代码

一、这是我自己做的一个很简单的XML封装类。目前的功能还不够完善,希望能够在大家的提点下继续完善。

二、源文件中包含有三个类(具体看头文件):


	  CXml      XML文件类

	  CXmlNode  XML结点类

	  CXmlNodes XML结点集合类  
三、如何使用

using namespace std;



BOOL funDFS( CXmlNode & node );



int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))

	{

		// TODO: 更改错误代码以符合您的需要

		_tprintf(_T("致命错误: MFC 初始化失败\n"));

		return 1;

	}



	CoInitialize(NULL);

	{// 这个括号很重要 它限定了智能指针的生存套间 





		CXml xml;

		xml.Open( "I:\\VC_CXmlFile\\test.xml" );



		//--------------------------------------------------------------------------

		



		CXmlNode node1;

		node1 =  xml.GetRoot()->GetChild("YEAR")->GetChild("MONTH")->GetChild("DAY");

		cout << node1.GetName() << endl;



		



		CXmlNode node2;

		node2 = node1;

		cout << node2.GetName() << endl;





		CXmlNode node3( node2 );

		cout << node2.GetName() << endl;





		//////////////////////////////////////////////////////////////////////////

		// 属性操作

		cout << xml.GetRoot()->GetAttribute( "price" ) << endl;

		xml.GetRoot()->GetChild("YEAR")->SetAttribute( "Now", "2005");

		xml.GetRoot()->DelAttribute("r");



		



		

		//////////////////////////////////////////////////////////////////////////

		// 取值 付值

		cout << xml.GetRoot()->GetChild("YEAR")->GetChild("QUARTER1")->GetInt(2005) << endl;

		cout << xml.GetRoot()->GetChild("YEAR")->GetChild("QUARTER2")->GetString("一月") << endl;

		cout << xml.GetRoot()->GetChild("YEAR")->GetChild("QUARTER3")->GetBOOL() << endl;

		cout << xml.GetRoot()->GetChild("YEAR")->GetChild("QUARTER4")->GetFloat(1.1) << endl;





		// 删除

		node1.Remove();

		



		// 子结点

		CXmlNodes nodes;

		nodes = xml.GetRoot()->GetChild("YEAR")->GetChildren();

		cout << nodes.GetCount() << endl;

		BOOL bRet = xml.GetRoot()->GetChild("YEAR")->GetChild("QUARTER2")->HasChildren();

		bRet = xml.GetRoot()->GetChild("YEAR")->HasChildren();





		// 遍历结点

		CXmlNode node4;

		node4 = xml.GetRoot();



		funDFS(node4);





	

		//--------------------------------------------------------------------------

		

		xml.Save();



		xml.Close();



	}

	CoUninitialize();





	return 0;

}





BOOL funDFS( CXmlNode & node )

{

	cout << node.GetName() << endl;



	CXmlNode child;

	CXmlNodes nodes;



	if( node.HasChildren() )

	{

		nodes = node.GetChildren();



		for( int i = 0; i < nodes.GetCount(); i   )

		{

			child = nodes.GetItem(i); 



			funDFS( child );

		}



		return TRUE;

	}

	else

	{

		return FALSE;

	}

}


四、结束语
希望大家多提意见 , 我将继续完善 sky-sea-earth@21cn.com

下载本文示例代码


一个基于MFC的XML封装类 CXml一个基于MFC的XML封装类 CXml一个基于MFC的XML封装类 CXml一个基于MFC的XML封装类 CXml一个基于MFC的XML封装类 CXml一个基于MFC的XML封装类 CXml一个基于MFC的XML封装类 CXml一个基于MFC的XML封装类 CXml一个基于MFC的XML封装类 CXml一个基于MFC的XML封装类 CXml一个基于MFC的XML封装类 CXml一个基于MFC的XML封装类 CXml
阅读(302) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~