MFC操作XML

前言:

转载请附上连接,本帖原创请勿照抄。

     这个多年以来有好多封装好的开源库可以供大家来使用,提高了大家工作效率也减轻了大家掉头发的速度,但是在日常工作中没找对方法和头绪的话是不是照样得掉头发。

     在这里先推荐几个常用的库:tinyxml2 C++格式https://www.cnblogs.com/dengxiaojun/p/4439443.html  有参考示例、Libxml2 https://blog.csdn.net/helonSY/article/details/7236642?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-4-7236642.nonecase 有参考示例、tinyxml https://blog.csdn.net/u014080185/article/details/78688328?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-13-78688328.nonecase 有参考示例。还有好多好多的XML库在这里就不一一举栗了,既然库这么多作者是用的哪种库呢?我上面的库都没用过也没自己试过😂

     作者使用的库叫做CMarkup 为什么用它呢?因为我觉得它对于我来说挺简单的(学都学了大半天不用它难道还要去在学一个库?),它支持C++、VC++,方便理解,有些库需要引入DLL添加路径什么的有点费事,这个库将.cpp和.h文件引入项目就可以了。

     CMarkup库有两个文件一个Markup.cpp文件一个和Markup.h源文件(源代码都有了我感觉我也可以改一个XML开源库出来😂),项目原型图(读取ini界面改过来的所以有些类似),读取ini文章地址https://blog.csdn.net/qq_37529913/article/details/103764736

     引入Markup库先实现添加XML字段功能

//Markup库头文件
#include "Markup.h"

//BUT1函数 MFC界面查询按钮
void CMFCTestIniDlg::OnBnClickedButton1()
{
	CFileFind finder;
	CString IniFile = "";
	GetDlgItem(IDC_EDIT1)->GetWindowText(IniFile);
	//查找是否存在ini文件,若不存在的话弹出提示
	BOOL ifFind = finder.FindFile(IniFile);
	if (!ifFind)
	{
		AfxMessageBox("没有该文件");
		return;
	}
	CString str;

	SetDlgItemText(IDC_EDIT2, str);
	SetDlgItemText(IDC_EDIT3, str);
	SetDlgItemText(IDC_EDIT4, str);
	SetDlgItemText(IDC_EDIT5, str);
        //创建XML文件
	Add_XML();
	//Open_XML(IniFile);
	//Update_XML(IniFile); 
	//------Delete_XML(IniFile);
}
void CMFCTestIniDlg::Add_XML() {
	CString strName = "https://blog.csdn.net/qq_37529913", strPatrolName = "断点_Dream2017", strTime = "2020.6.19";
	CMarkup xml_Path;   
	//使用CMarkup可以声明也可以不声明
	xml_Path.SetDoc("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");//双引号需要转义

	//添加一个xml对象        
	xml_Path.AddElem(_T("LEADMAP"));               
	//进入根元素   
	xml_Path.IntoElem();
	//进去指针指向的当前标签        
	xml_Path.AddElem(_T("ROUTE"));
	//添加一个标签       
	xml_Path.SetAttrib(_T("user_name"), strName);
	//对指针指向标签添加属性        
	xml_Path.SetAttrib(_T("route_name"), strPatrolName);
	xml_Path.SetAttrib(_T("start_time"), strTime);


	xml_Path.AddElem("Math");//添加Math元素
	xml_Path.IntoElem();//进入Math元素
	xml_Path.AddElem("Advanced_Mathematics", "classroom No.1");
	xml_Path.AddElem("Mathematical_Analysis", "classroom No.2");
	xml_Path.AddElem("Linear_Algebra", "classroom No.3");
	xml_Path.AddElem("Probability_Theory", "classroom No.4");
	xml_Path.OutOfElem();//退出Math元素

	xml_Path.AddElem("English");//添加English元素
	xml_Path.AddElem("Student", "Xiao_Ming");//添加内容为Xiao_Ming的Student元素
	xml_Path.AddElem("Student", "Li_Hua");//添加内容为Li_Hua的Student元素

	//退出根元素 
	xml_Path.OutOfElem();
	//保存文件
	xml_Path.Save(_T("test.xml"));                

}

     因为编辑框不能为空所以新建了一个aa.ini,然后点击查询调用创建XML函数创建XML文件。

     实现查询XML字段功能

void CMFCTestIniDlg::OnBnClickedButton1()
{
	CFileFind finder;
	CString IniFile = "";
	GetDlgItem(IDC_EDIT1)->GetWindowText(IniFile);
	//查找是否存在ini文件,若不存在的话弹出提示
	BOOL ifFind = finder.FindFile(IniFile);
	if (!ifFind)
	{
		AfxMessageBox("没有该文件");
		return;
	}
	CString str;

	SetDlgItemText(IDC_EDIT2, str);
	SetDlgItemText(IDC_EDIT3, str);
	SetDlgItemText(IDC_EDIT4, str);
	SetDlgItemText(IDC_EDIT5, str);
	//Add_XML();
	Open_XML(IniFile);
	//Update_XML(IniFile); 
	//------Delete_XML(IniFile);
}
void CMFCTestIniDlg::Open_XML(CString file) {

	CMarkup xmlInfo;
	CString strTagName;//元素名称
	CString strData;//元素内容

	if (!(xmlInfo.Load(file)))
	{
		MessageBox(NULL, _T("请检查xml文件"));
	}
	xmlInfo.ResetMainPos();//把xml对象指向的位置初始化,使其指向文件开始
	xmlInfo.FindElem(); //查找任意元素,此处查找到的第一个元素即为根元素
	xmlInfo.IntoElem();//进入Root
	while (xmlInfo.FindElem("Student"))//不能使用if,因为要遍历所有的Student元素
	{
		strTagName = xmlInfo.GetTagName();//获取元素名称
		strData = xmlInfo.GetData();获取元素内容
		AfxMessageBox(strTagName + " " + strData);

	}
}

     实现修改XML字段功能

void CMFCTestIniDlg::Update_XML(CString file) {
	CMarkup xml;
	if (!(xml.Load(file)))
	{
		MessageBox(NULL, _T("请检查xml文件"));
	}
	CString strUserID = _T("");
	xml.ResetMainPos();
	if (xml.FindChildElem("Math"))
	{
		xml.IntoElem();
		if (xml.FindChildElem("Advanced_Mathematics"))
		{
			xml.IntoElem();
			CString str_type = xml.GetAttrib("type");
			MessageBox(str_type);
			xml.SetAttrib("type", "change");
			strUserID = xml.GetData();
			xml.OutOfElem();
		}
		if (xml.FindChildElem("Probability_Theory"))
		{
			xml.IntoElem();
			xml.SetData("classroom No.5");
			xml.Save(file);
			return;
		}
	}
}

     实现删除XML字段功能

void CMFCTestIniDlg::Delete_XML(CString file) {

	CMarkup xml;
	if (!(xml.Load(file)))
	{
		MessageBox(NULL, _T("请检查xml文件"));
		return;
	}

	CString strUserID = _T("");
	xml.ResetMainPos();
	if (xml.FindChildElem("ROUTE"))
	{
		xml.IntoElem();
		xml.RemoveElem();
		xml.Save(file);

	}

}

     基本上XML也就告一段落了,之前一直以为一周可以写两篇博客没想到最后变成了一月写两次博客...

     最后给大家分享一些关于Markup库的文章:

          https://www.cnblogs.com/lovelyx/p/4867109.html

          https://blog.csdn.net/hanijiang/article/details/104225371 API说明

          https://blog.csdn.net/xuelabizp/article/details/49055371 文章写的很好

     完整Demo下载连接:https://download.csdn.net/download/qq_37529913/12620124

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: MFC是微软基于Windows操作系统开发的一套应用程序框架,用于简化Windows GUI应用程序的开发过程,其中包括控件、界面设计、消息传递等功能。而TinyXML是一个轻量级的XML解析库,用于解析和处理XML文件。 MFC和TinyXML可以互相结合使用,以便更方便地处理XML文件。在MFC使用TinyXML,我们需要包含TinyXML的头文件和库文件,并将其集成到MFC项目中。然后,我们可以使用TinyXML提供的API来解析XML文件、查找XML节点、读取和修改XML节点的属性和文本内容,以及创建新的XML节点等操作。 通过结合MFC和TinyXML,我们可以在MFC应用程序中轻松地读取和解析XML配置文件,例如读取和设置应用程序的一些设置项、存储和加载用户的数据等。同时,我们也可以使用TinyXML来生成、修改和保存XML文件,例如将应用程序的数据导出为XML文件、从XML文件中加载数据等。 总之,MFC和TinyXML的结合可以使MFC应用程序更加灵活和便捷地处理XML文件。无论是读取、解析还是生成和编辑XML文件,MFC和TinyXML都提供了简单易用的接口,帮助开发者在Windows平台上进行XML文件的处理。 ### 回答2: MFC(Microsoft Foundation Class)是微软公司开发的一套C++类库,用于在Windows操作系统上开发图形用户界面应用程序。它提供了一系列的封装类,简化了Windows编程的复杂性,使开发者能够更加方便地创建窗口、控件以及处理用户交互等操作。 TinyXML是一个轻量级的C++ XML解析器,它能够在内存中解析XML文件,并提供了便利的接口来访问和操作XML文档的内容。TinyXML可以很好地与MFC集成使用,可以方便地将XML文档的数据存储到MFC程序中的数据结构中,或将MFC程序中的数据保存为XML文件。 MFC的封装类提供了与文件操作相关的功能,而TinyXML提供了解析和操作XML文件的能力。在MFC程序中使用TinyXML,可以通过调用其提供的接口,实现读取、写入和修改XML文件的功能。例如,可以使用TinyXMLMFC程序中的数据存储为XML文档,然后在需要时将其读取回来进行处理;或者可以读取外部的XML文件,并将其内容解析并存储到MFC程序中的数据结构中,以供程序进一步使用MFC和TinyXML的结合可以为MFC程序添加XML处理的能力,方便地读取和存储配置文件、数据文件等内容。同时,由于TinyXML的轻量级特性,它对内存的占用较小,解析效率也较高,使得MFC程序在处理XML文件时能够更加高效和灵活。总而言之,MFC和TinyXML的结合为开发人员提供了一种简便而有效的方式来处理XML数据。 ### 回答3: MFC TinyXML是一个用于处理XML文件的小型C++库。它基于MFC框架,提供了简洁的API和易于使用的接口,使开发人员可以轻松地读取、写入和操作XML文档。 MFC TinyXML使用DOM(文档对象模型)的方式来解析XML文件。它可以将XML文档加载到内存中并创建一个层次结构的节点树,开发者可以通过遍历树状结构来访问和修改XML文件的内容。MFC TinyXML还支持XPath,这是一种通过路径来定位和选择XML节点的语言。开发人员可以使用XPath表达式来准确定位所需的节点,从而更加灵活地处理XML文档。 除了基本的读写功能,MFC TinyXML还提供了一些特性,如错误处理和UTF-8编码的支持。错误处理功能可以帮助开发人员在XML解析过程中捕获和处理错误,确保程序的稳定性。而UTF-8编码的支持则使得MFC TinyXML可以正确地处理不同语言和字符集的XML文件。 总之,MFC TinyXML是一个轻量级、方便易用的XML处理库,特别适合在MFC框架下开发的应用程序中使用。无论是读取配置文件、解析数据、还是生成XML报告,MFC TinyXML都可以帮助开发人员快速、高效地完成相关任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

双子座断点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值