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服务器为进程 ...
随机推荐
- 属性"XmlFileName"的代码生成失败
属性"XmlFileName"的代码生成失败.错误是:"未将对象引用设置到对象实例" 解决: 控件修改造成,关闭打开页面,重新生成
- 激活Windows 10 正式版
原文 http://jingyan.baidu.com/article/27fa732684b5f646f8271ff4.html Windows 10只提供为期一年的免费升级.因此,不要无限拖延期自 ...
- java 解析国密SM2算法证书
首先说明用Java自带的解析x509证书类,是不能解析sm2算法的证书,执行会抛出异常. 用开源库bouncycastle能够解析.详细代码 private byte[] getCSPK(byte[] ...
- VS2010 简单实用快捷键
VS2010 简单实用快捷键 1). Ctrl+H: 替换 2). Ctrl+F: 查找 3). F5: 启动调试 4). CTRL + F7 生成编译 5). Ctrl+F5: 开始执行(不调试) ...
- Java对象序列化与反序列化一 JSON
Java对象序列化与反序列化一 JSON 1. 依赖库 jackson-all-1.6.1.jar 2. 代码 public class Student { private String nam ...
- ping的意思
Ping是测试网络联接状况以及信息包发送和接收状况非常有用的工具,是网络测试最常用的命令.Ping向目标主机(地址)发送一个回送请求数据包,要求目标主机收到请求后给予答复,从而判断网络的响应时间和本机 ...
- 没有login页面
"/"应用程序中的服务器错误. 无法找到资源. 说明:HTTP 404.您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用.请检查以下 URL 并确保 ...
- JavaSript模块化 && AMD CMD 详解.....
模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处理.模块化是一种处理复杂系统分解为代码结构更合理,可维护性更高的可管理的模块的方式.可以想象一个巨大 ...
- Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器
Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器 MVC概念 MVC的含义是 “模型-视图-控制器”.MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程 ...
- CSS: inline-block的应用和float块高度塌陷
普通流高度塌陷: 当块float浮动时,不会对块布局产生影响,块仍然会按照左右或者上下的顺序排列.但是会影响文档的排列,当文档的高度超过块的高度时,块的高度会产生塌陷现象. 高度塌陷解决方法: ...