Chinaunix首页 | 论坛 | 博客
  • 博客访问: 589071
  • 博文数量: 752
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(752)

文章存档

2011年(1)

2008年(751)

我的朋友

分类:

2008-10-13 16:45:38

一个基于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


--------------------next---------------------

请登陆后下载


已经更新到V3.0 ( wangjia184 发表于 2008-1-16 17:36:00)
 
下载不了啊,作者能给我发一份吗,cheding@126.com ( 靖平28 发表于 2007-12-23 23:12:00)
 






最新版本
最新版本
最新版本
最新版本
最新版本 ( wangjia184 发表于 2007-12-11 13:43:00)
 
( wangjia184 发表于 2007-12-11 13:43:00)
 
新版本下载地址


( wangjia184 发表于 2007-7-17 9:50:00)
 
RemoveChildren的bug已经修复

之所以不用removeAttribute和getAttribute是因为3.0-版本无此方法

之所以不用childNodes是因为 childNodes会把文本做为一个节点

新版本能够自动使用最高版本的MSXML
依次尝试6.0 5.0 4.0 3.0 2.6

( wangjia184 发表于 2007-7-17 9:50:00)
 
最新版本地址:


( wangjia184 发表于 2007-7-17 9:30:00)
 
新版不能下载阿,给我发一个吧
wuhran@126.com
谢谢了。
谁有最新版的都可以发给我啊 ( wuhran 发表于 2007-6-5 9:53:00)
 
無法下載新版,是否可以mail給我新版呢?
下載新版時,要輸入帳號、密碼,所以無法下載
我的mail是jk28kimo@yahoo.com.tw
謝謝。 ( jk1258 发表于 2006-12-21 11:06:00)
 
恩 确实 不够简练 ( wangjia184 发表于 2006-9-4 12:01:00)
 
.......................................................

--------------------next---------------------

阅读(226) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~