CMarkup类在VC中的使用
首先到http://www.firstobject.com/dn_markup.htm上面下载CMarkup类,将CMarkup.cpp和CMarkup.h导入到我们的工程中就可以了。编译可能会出现问题,解决的方法是在CMarkup.cpp的开头加上#include <stdafx.h>,或者关闭预编译也可以。
1、创建一个XML文档
对于创建一个XML文档,需要实例化一个CMarkup对象,并调用AddElem创建根元素。在这个位置,如果你调用 AddElem("School") ,文档会简单的装一个空元素<School/>. 然后调用AddChildElem 在根元素的下面创建元素。
2 xml.SetDoc("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
3 xml.AddElem("School");
4 xml.IntoElem();
5 xml.AddElem("Department","Automation");
6 xml.AddElem("Department","Computer");
7 xml.AddElem("Department","Math");
8 xml.AddElem("Department","English");
9 xml.OutOfElem();
10 xml.Save("School.xml");
效果如下:
2<School>
3 <Department>Automation</Department>
4 <Department>Computer</Department>
5 <Department>Math</Department>
6 <Department>English</Department>
7</School>
8
2、浏览特定元素
2 xml.Load("School.xml");
3 BOOL bFind=TRUE;
4 xml.ResetMainPos();
5
6 while(xml.FindChildElem("Department"))
7 {
8 CString strTagName=_T("");
9 CString strData=_T("");
10 strTagName=xml.GetChildTagName(); //此时节点是父节点
11 strData=xml.GetChildData();
12 TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
13 }
//***********************这样也可以*****************************/
2 xml.Load("School.xml");
3 BOOL bFind = TRUE;
4 xml.ResetMainPos();
5
6 while (xml.FindChildElem("Department"))
7 {
8 xml.IntoElem();
9 CString strTagName = _T("");
10 CString strData = _T("");
11 strTagName = xml.GetTagName();
12 strData = xml.GetData();
13 TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
14 xml.OutOfElem();
15 }
//***********************或者这样也可以***************************/
2 xml.Load("School.xml");
3 BOOL bFind = TRUE;
4 xml.ResetMainPos();
5 xml.FindElem(); //School
6 xml.IntoElem();
7
8 while (xml.FindElem("Department"))
9 {
10 CString strTagName = _T("");
11 CString strData = _T("");
12 strTagName = xml.GetTagName();
13 strData = xml.GetData();
14 TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
15 }
//***********结果**************
      ---tagName:Department,Data:Automation--
---tagName:Department,Data:Computer--
---tagName:Department,Data:Math--
---tagName:Department,Data:English--
3、修改元素
//把Department为”English“改为”Chinese“
2 BOOL bLoadXml=FALSE;
3 bLoadXml=xml.Load("School.xml");
4
5 if(bLoadXml)
6 {
7 CString str=_T("");
8 xml.ResetMainPos();
9 xml.FindElem();
10 xml.IntoElem();
11 while(xml.FindElem("Department"))
12 {
13 str=xml.GetData();
14 if(str=="English")
15 {
16 xml.SetData("Chinese");
17 xml.Save("School.xml");
18 break;
19 }
20 }
21 }
效果如下:
2<School>
3 <Department>Automation</Department>
4 <Department>Computer</Department>
5 <Department>Math</Department>
6 <Department>Chinese</Department>
7</School>
8
4、添加
4、1 添加在最后面(用AddElem)
2 BOOL bLoadXml=FALSE;
3 bLoadXml=xml.Load("School.xml");
4 if(bLoadXml)
5 {
6 xml.ResetMainPos();
7 xml.FindElem();
8 xml.IntoElem();
9 xml.AddElem("Department","SiQinghua");
10 xml.OutOfElem();
11 xml.Save("School.xml");
12 }
效果如下:
2<School>
3 <Department>Automation</Department>
4 <Department>Computer</Department>
5 <Department>Math</Department>
6 <Department>Chinese</Department>
7 <Department>SiQinghua</Department>
8</School>
4、2 添加在最前面(用InsertElem)
2 BOOL bLoadXml=FALSE;
3 bLoadXml=xml.Load("School.xml");
4 if(bLoadXml)
5 {
6 xml.ResetMainPos();
7 xml.FindElem();
8 xml.IntoElem();
9 xml.AddElem("Department","SiQinghua");
10 xml.OutOfElem();
11 xml.Save("School.xml");
12 }
效果如下:
2<School>
3 <Department>NARI</Department>
4 <Department>Automation</Department>
5 <Department>Computer</Department>
6 <Department>Math</Department>
7 <Department>Chinese</Department>
8 <Department>SiQinghua</Department>
9</School>
10
5、删除
2 BOOL bLoadXml=FALSE;
3 bLoadXml=xml.Load("School.xml");
4 if(bLoadXml)
5 {
6 BOOL bFind=TRUE;
7 xml.ResetMainPos();
8 while(bFind)
9 {
10 bFind=xml.FindChildElem("Department");
11 if(bFind)
12 {
13 CString strData=_T("");
14 strData=xml.GetChildData(); //此时节点还是父节点
15 if("SiQinghua"==strData)
16 {
17 xml.RemoveChildElem();
18 xml.Save("School.xml");
19 break;
20 }
21 }
22 }
23 }
效果如下:
2 <School>
3 <Department>NARI</Department>
4 <Department>Automation</Department>
5 <Department>Computer</Department>
6 <Department>Math</Department>
7 <Department>Chinese</Department>
8 </School>
9
上面的例子都是不带属性的,下面举一个带有属性的例子。
1、生成XML文档
2 xml.SetDoc("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
3 xml.AddElem("UserInfo");
4 xml.IntoElem();
5 for(int i=0;i<10;i++)
6 {
7 CString strID=_T("");
8 CString strPwd=_T("");
9
10 srand(UINT(time(NULL)+i)); //产生一个随机数
11 int nLevel=rand()%256;
12
13 strID.Format("UserID%02d",i);
14 strPwd.Format("UserPwd%02d",i);
15
16 xml.AddElem("User");
17 xml.AddAttrib("UserID",strID);
18 xml.AddAttrib("UserPwd",strPwd);
19 xml.AddAttrib("UserLevel",nLevel);
20 }
21 xml.OutOfElem();
22 xml.Save("UserInfo.xml");
效果如下:
2<UserInfo>
3 <User UserID="UserID00" UserPwd="UserPwd00" UserLevel="85"/>
4 <User UserID="UserID01" UserPwd="UserPwd01" UserLevel="88"/>
5 <User UserID="UserID02" UserPwd="UserPwd02" UserLevel="92"/>
6 <User UserID="UserID03" UserPwd="UserPwd03" UserLevel="95"/>
7 <User UserID="UserID04" UserPwd="UserPwd04" UserLevel="98"/>
8 <User UserID="UserID05" UserPwd="UserPwd05" UserLevel="101"/>
9 <User UserID="UserID06" UserPwd="UserPwd06" UserLevel="105"/>
10 <User UserID="UserID07" UserPwd="UserPwd07" UserLevel="108"/>
11 <User UserID="UserID08" UserPwd="UserPwd08" UserLevel="111"/>
12 <User UserID="UserID09" UserPwd="UserPwd09" UserLevel="115"/>
13</UserInfo>
14
2、查找特定属性
2 BOOL bLoadXml=FALSE;
3 BOOL bFind=FALSE;
4 bLoadXml=xml.Load("UserInfo.xml");
5 if(bLoadXml)
6 {
7 CString strID;
8 CString strPwd;
9 xml.ResetMainPos();
10 xml.FindElem(); //UserInfo
11 while(xml.FindChildElem("User"))
12 {
13 strID=xml.GetChildAttrib("UserID");
14 strPwd=xml.GetChildAttrib("UserPwd");
15 TRACE("\n---id:%s,pwd:%s---\n",strID,strPwd);
16 if(strID=="UserID02" && strPwd=="UserPwd02")
17 {
18 bFind=TRUE;
19 break;
20 }
21 }
22 }
23 if(bFind==TRUE)
24 TRACE("\n---find---\n");
25 else
26 TRACE("\n---not find---\n");
3、修改特定属性
2 BOOL bFind=FALSE;
3 BOOL bLoadXml=FALSE;
4 bLoadXml=xml.Load("UserInfo.xml");
5 if(bLoadXml)
6 {
7 CString strID;
8 CString strPwd;
9 xml.ResetMainPos();
10 xml.FindElem(); //UserInfo
11 while(xml.FindChildElem("User"))
12 {
13 strID=xml.GetChildAttrib("UserID");
14 strPwd=xml.GetChildAttrib("UserPwd");
15 TRACE("\n--id:%s,pwd:%s--\n",strID,strPwd);
16 if(strID=="UserID02" && strPwd=="UserPwd02")
17 {
18 bFind=TRUE;
19 xml.SetChildAttrib("UserID",strID+CString("Modified"));
20 xml.Save("UserInfo.xml");
21 break;
22 }
23 }
24 }
25 if(bFind==TRUE)
26 TRACE("\n---find---\n");
27 else
28 TRACE("\n---not find---\n");
效果如下:
2<UserInfo>
3 <User UserID="UserID00" UserPwd="UserPwd00" UserLevel="85"/>
4 <User UserID="UserID01" UserPwd="UserPwd01" UserLevel="88"/>
5 <User UserID="UserID02Modified" UserPwd="UserPwd02" UserLevel="92"/>
6 <User UserID="UserID03" UserPwd="UserPwd03" UserLevel="95"/>
7 <User UserID="UserID04" UserPwd="UserPwd04" UserLevel="98"/>
8 <User UserID="UserID05" UserPwd="UserPwd05" UserLevel="101"/>
9 <User UserID="UserID06" UserPwd="UserPwd06" UserLevel="105"/>
10 <User UserID="UserID07" UserPwd="UserPwd07" UserLevel="108"/>
11 <User UserID="UserID08" UserPwd="UserPwd08" UserLevel="111"/>
12 <User UserID="UserID09" UserPwd="UserPwd09" UserLevel="115"/>
13</UserInfo>
CMarkup类在VC中的使用的更多相关文章
- 转载 VC轻松解析XML文件 - CMarkup类的使用方法
		VC轻松解析XML文件 - CMarkup类的使用方法http://www.cctry.com/thread-3866-1-1.html VC解析XML文件的工具有很多,CMarkup, tinyXM ... 
- VC++中的类的内存分布(上)
		0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ... 
- VC++中的类的内存分布(上)(通过强制转换,观察地址,以及地址里的值来判断)
		0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ... 
- VC解析XML--使用CMarkup类解析XML
		经过今天尝试MFC解析XML串,也算有了不少收获,总结一下. 我是使用的CMarkup类对XML进行操作. CMarkup好象都是先从一个xml文件里 ... 
- VC中基于 Windows 的精确定时[转]
		在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间,定时刷新屏幕上的进度条,上位 机定时向下位机发送命令和传送数据等.特别是在对控制性能要求较高的实时控制系统和数据采集系统中,就更需要 ... 
- VC中LINK 2001 和 LINK 2009 的错误的解决
		最近将两个开源C++项目编译成windows版本的时候遇到很多问题,关键是两个项目经过同事的修改之后,一个项目引用了另一个项目,两个项目的头文件中都有一些跨平台的关于数据类型,以及一些通用函数的定义, ... 
- VC中常用的宏
		我们在VS环境中开发的时候,会遇到很多宏定义,这些宏可以应用到代码中,或用于编译.工程选项等设置,总之是我们开发中必不可少的工具,有必要做一个总结.有些宏是C/C++定义的,有些宏是VC环境预 ... 
- VC中常用的宏[转]
		我们在VS环境中开发的时候,会遇到很多宏定义,这些宏可以应用到代码中,或用于编译.工程选项等设置,总之是我们开发中必不可少的工具,有必要做一个总结.有些宏是C/C++定义的,有些宏是VC环境预定义的. ... 
- VC中调用COM组件的方法(转载)
		原文参考:http://hi.baidu.com/mingyueye/item/53ebecd44da76917d80e4449 总结一下在VC中调用COM组件的方法 准备及条件: COM服务器为进程 ... 
随机推荐
- windows server2008 r2修改远程桌面连接端口。
			1. windows 2008远程桌面端口默认是用的是3389端口,但是由于安全考虑,通常我们安装好系统后一般都会考虑把原来的3389端口更改为另外的端口. 2.更改过程: 2-1.打开注册表: ... 
- 帝国cms本地搬家到服务器文章路径问题?
			由于我的服务器不支持采集功能,我只能选择先在本地采集好文章发布于本地,再打算同步于服务器. 按照官方的做法, 1.先进后台备份了网站的所有数据,系统——备份与恢复数据——备份数据 2.将e\admin ... 
- access数据库 top语句失效解决方法
			使用查询语句 select top 1 * from News order by [PublicTime] desc 就不一定管用了,如果News表里面的PublicTime字段 ... 
- 在GridView中实现全选反选的例子
			<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GridView控件.asp ... 
- NHibernate composite-id联合主键配置
			NHibernate的联合主键配置比较复杂,初次配置可能需要花些时间,但只要我们理解了,掌握一定的步骤还是很容易的. 1.设计数据结构 Users:用户表 名称 Users 说明 用户表 序号 字段名 ... 
- Libev学习笔记2
			这一节根据官方文档给出的简单示例,深入代码内部,了解其实现机制.示例代码如下: int main (void) { struct ev_loop *loop = EV_DEFAULT; ev_io_i ... 
- Flex TextInput的restrict属性应用
			1,<mx:TextInput id="test_ti" width="160" maxChars="20" restrict=&qu ... 
- Java多线程之synchronized(五)
			上篇介绍了用synchronized修饰static方式来实现“Class 锁”,今天要介绍另一种实现方式,synchronized(class)代码块,写法不一样但是作用是一样的.下面我附上一段代码 ... 
- JSP内置对象---application
			application 对象 服务器启动后,就产生了application 对象.当一个客户访问服务器上的一个JSP 页面时,JSP 引擎为该客户分配这个application 对象, 当客户在 ... 
- HTML5 标准属性  NEW:HTML 5 中新的标准属性。  注释:HTML 4.01 不再支持 accesskey 属性:
			属性 值 描述 accesskey character 规定访问元素的键盘快捷键 class classname 规定元素的类名(用于规定样式表中的类). contenteditable true f ... 
