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服务器为进程 ...
随机推荐
- PHP CI框架最近学到的内容
CI框架配置方面注意的细节 在config里面的database.php里面是和数据库配置相关的内容 $db['default'] = array( 'dsn' => '', 'hostname ...
- bzoj 1042: [HAOI2008]硬币购物 dp+容斥原理
题目链接 1042: [HAOI2008]硬币购物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1706 Solved: 985[Submit][ ...
- hdu 4638 Group 莫队算法
题目链接 很裸的莫队, 就不多说了... #include<bits/stdc++.h> using namespace std; #define pb(x) push_back(x) # ...
- Fedora 17配置ssh及Windows远程连接
转载自:http://nanjingjiangbiao-t.iteye.com/blog/1794213 Fedora 23 默认已经安装好openssh server了,不用再装不过默认情况下没有开 ...
- nrf51 官方PWM库
地址:https://github.com/NordicSemiconductor/nrf51-pwm-library nrf_pwm_init函数 初始化PWM参数 设置输出pwm的gpio pin ...
- RFID标签天线的三种制作方法
在RFID标签中,天线层是主要的功能层,其目标是传输最大的能量进出标签芯片.RFID天线是按照射频识别所要求的功能而设计的电子线路,将导电银浆或导电碳浆网印在PVC.PC或PET上,再与面层.保护层和 ...
- Json.Net系列教程 3.Json.Net序列化和反序列化设置
原文 Json.Net系列教程 3.Json.Net序列化和反序列化设置 上节补充 首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framewo ...
- HDU 1551 Cable master
题解:很显然的二分检索,在算法艺术上看过原题,不过这里要注意精度: #include <cstdio> int n,m; ]; bool test(double x){ ,i; ;i< ...
- Android 性能优化 三 布局优化ViewStub标签的使用
小黑与小白的故事,通过虚拟这两个人物进行一问一答的形式来共同学习ViewStub的使用 小白:Hi,小黑,ViewStub是什么?听说能够用来进行布局优化. 小黑:ViewStub 是一个隐藏的,不占 ...
- Linux下shell编程实例
1. 推断一文件是不是块或字符设备文件.假设是将其复制到 /dev 文件夹下 read -p "input a file:" filename if [ -b $filename ...