转载 VC轻松解析XML文件 - CMarkup类的使用方法
VC轻松解析XML文件 - CMarkup类的使用方法
http://www.cctry.com/thread-3866-1-1.html
VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等。
据说tinyXML很好,可能字符集问题,我编译不了。
所以就用CMarkup来解析,使用过后,觉得非常不错,使用起来很方便。
CMarkup下载地址:http://www.firstobject.com/
发现网上有方法很法,我就摘下来了
- //----------UserInfo.xml--------------
- xml version="1.0" encoding="UTF-8" ?>
- <UserInfo>
- <UserID>luo</UserID>
- <UserID>lin</UserID>
- </UserInfo>
- //----------UserInfo.xml--------------
- xml version="1.0" encoding="UTF-8" ?>
- <UserInfo>
- <UserID>luo</UserID>
- <UserID>lin</UserID>
- </UserInfo>
复制代码
1. 生成UserInfo.xml
- CMarkup xml;
- xml.SetDoc("xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
- xml.AddElem("UserInfo");
- xml.IntoElem();
- xml.AddElem("UserID","luo");
- xml.AddElem("UserID","lin");
- xml.OutOfElem();
- xml.Save("UserInfo.xml");
- CMarkup xml;
- xml.SetDoc("xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
- xml.AddElem("UserInfo");
- xml.IntoElem();
- xml.AddElem("UserID","luo");
- xml.AddElem("UserID","lin");
- xml.OutOfElem();
- xml.Save("UserInfo.xml");
复制代码
2. 浏览特定元素
//----查看所有UserID----
- CMarkup xml;
- xml.Load("UserInfo.xml");
- BOOL bFind = true;
- xml.ResetMainPos();
- while (xml.FindChildElem("UserID");)
- {
- //此时接点还是父接点
- CString strTagName = _T("");
- CString strData = _T("");
- strTagName = xml.GetChildTagName();
- strData = xml.GetChildData();
- TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
- }
- /********************这样也可以******************
- CMarkup xml;
- xml.Load("UserInfo.xml");
- BOOL bFind = true;
- xml.ResetMainPos();
- while (xml.FindChildElem("UserID");)
- {
- xml.IntoElem();
- CString strTagName = _T("");
- CString strData = _T("");
- strTagName = xml.GetTagName();
- strData = xml.GetData();
- TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
- xml.OutOfElem();
- }*/
- /**************这样也可以**********************
- CMarkup xml;
- xml.Load("UserInfo.xml");
- BOOL bFind = true;
- xml.ResetMainPos();
- xml.FindElem(); //UserInfo
- xml.IntoElem();
- while (xml.FindElem("UserID");)
- {
- CString strTagName = _T("");
- CString strData = _T("");
- strTagName = xml.GetTagName();
- strData = xml.GetData();
- TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
- }
- */
复制代码
//-------------结果----------
---tagName:UserID,Data:luo--
---tagName:UserID,Data:lin—
//----查看所有UserID----
- CMarkup xml;
- xml.Load("UserInfo.xml");
- BOOL bFind = true;
- xml.ResetMainPos();
- while (xml.FindChildElem("UserID");)
- {
- //此时接点还是父接点
- CString strTagName = _T("");
- CString strData = _T("");
- strTagName = xml.GetChildTagName();
- strData = xml.GetChildData();
- TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
- }
- /********************这样也可以******************
- CMarkup xml;
- xml.Load("UserInfo.xml");
- BOOL bFind = true;
- xml.ResetMainPos();
- while (xml.FindChildElem("UserID");)
- {
- xml.IntoElem();
- CString strTagName = _T("");
- CString strData = _T("");
- strTagName = xml.GetTagName();
- strData = xml.GetData();
- TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
- xml.OutOfElem();
- }*/
- /**************这样也可以**********************
- CMarkup xml;
- xml.Load("UserInfo.xml");
- BOOL bFind = true;
- xml.ResetMainPos();
- xml.FindElem(); //UserInfo
- xml.IntoElem();
- while (xml.FindElem("UserID");)
- {
- CString strTagName = _T("");
- CString strData = _T("");
- strTagName = xml.GetTagName();
- strData = xml.GetData();
- TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
- }
- */
复制代码
//-------------结果----------
---tagName:UserID,Data:luo--
---tagName:UserID,Data:lin—
3. 修改
//--------把UserID为”luo”改为”flypigluo”-----------
- BOOL bLoadXml = false;
- CMarkup xml;
- bLoadXml = xml.Load("UserInfo.xml");
- if (bLoadXml)
- {
- CString strUserID = _T("");
- xml.ResetMainPos();
- xml.FindElem();
- xml.IntoElem();
- while (xml.FindElem("UserID"))
- {
- strUserID = xml.GetData();
- if (strUserID=="luo")
- {
- xml.SetData(CString("flypig")+strUserID);
- xml.Save("UserInfo.xml");
- break;
- }
- }
- }
- //--------把UserID为”luo”改为”flypigluo”-----------
- BOOL bLoadXml = false;
- CMarkup xml;
- bLoadXml = xml.Load("UserInfo.xml");
- if (bLoadXml)
- {
- CString strUserID = _T("");
- xml.ResetMainPos();
- xml.FindElem();
- xml.IntoElem();
- while (xml.FindElem("UserID"))
- {
- strUserID = xml.GetData();
- if (strUserID=="luo")
- {
- xml.SetData(CString("flypig")+strUserID);
- xml.Save("UserInfo.xml");
- break;
- }
- }
- }
复制代码
4. 添加
4.1 添在最后面(使用的是AddElem)
//加在最后面
- BOOL bLoadXml = false;
- CMarkup xml;
- bLoadXml = xml.Load("UserInfo.xml");
- if (bLoadXml)
- {
- xml.ResetMainPos();
- xml.FindElem();
- xml.IntoElem();
- xml.AddElem("UserID","luoluo");
- xml.OutOfElem();
- xml.Save("UserInfo.xml");
- }
- //--------原来为------
- xml version="1.0" encoding="UTF-8" ?>
- <UserInfo>
- <UserID>luo</UserID>
- <UserID>lin</UserID>
- </UserInfo>
- //---------添加后为-------------
- xml version="1.0" encoding="UTF-8" ?>
- <UserInfo>
- <UserID>luo</UserID>
- <UserID>lin</UserID>
- <UserID>luoluo</UserID>
- </UserInfo>
复制代码
4.2 加在最前面(使用InsertElem)
- BOOL bLoadXml = false;
- CMarkup xml;
- bLoadXml = xml.Load("UserInfo.xml");
- if (bLoadXml)
- {
- xml.ResetMainPos();
- xml.FindElem();
- xml.IntoElem();
- xml.InsertElem("UserID","AddUserIDHead");
- xml.OutOfElem();
- xml.Save("UserInfo.xml");
- }
- //----原来为—
- xml version="1.0" encoding="UTF-8" ?>
- <UserInfo>
- <UserID>luo</UserID>
- <UserID>lin</UserID>
- </UserInfo>
- //------修改后-----
- xml version="1.0" encoding="UTF-8" ?>
- <UserInfo>
- <UserID>AddUserIDHead</UserID>
- <UserID>luo</UserID>
- <UserID>lin</UserID>
- </UserInfo>
- BOOL bLoadXml = false;
- CMarkup xml;
- bLoadXml = xml.Load("UserInfo.xml");
- if (bLoadXml)
- {
- xml.ResetMainPos();
- xml.FindElem();
- xml.IntoElem();
- xml.InsertElem("UserID","AddUserIDHead");
- xml.OutOfElem();
- xml.Save("UserInfo.xml");
- }
- //----原来为—
- xml version="1.0" encoding="UTF-8" ?>
- <UserInfo>
- <UserID>luo</UserID>
- <UserID>lin</UserID>
- </UserInfo>
- //------修改后-----
- xml version="1.0" encoding="UTF-8" ?>
- <UserInfo>
- <UserID>AddUserIDHead</UserID>
- <UserID>luo</UserID>
- <UserID>lin</UserID>
- </UserInfo>
复制代码
5. 删除
- CMarkup xml;
- xml.Load("UserInfo.xml");
- BOOL bFind = true;
- xml.ResetMainPos();
- while (bFind)
- {
- bFind = xml.FindChildElem("UserID");
- if (bFind)
- {
- //此时接点还是父接点
- CString strData = _T("");
- strData = xml.GetChildData();
- if (strData=="luo")
- {
- xml.RemoveChildElem();
- xml.Save("UserInfo.xml");
- break;
- }
- }
- }
- CMarkup xml;
- xml.Load("UserInfo.xml");
- BOOL bFind = true;
- xml.ResetMainPos();
- while (bFind)
- {
- bFind = xml.FindChildElem("UserID");
- if (bFind)
- {
- //此时接点还是父接点
- CString strData = _T("");
- strData = xml.GetChildData();
- if (strData=="luo")
- {
- xml.RemoveChildElem();
- xml.Save("UserInfo.xml");
- break;
- }
- }
- }
复制代码
6. 查找
见第二点浏览。类似上面的例子里面没有属性这些东西,下面的一个例子是有属性的
- //UserInfo1.xml
- xml version="1.0" encoding="UTF-8" ?>
- <UserInfo>
- <User UserID="UserID00" UserPwd="UserPwd00" UserLevel="158" />
- <User UserID="UserID01" UserPwd="UserPwd01" UserLevel="162" />
- <User UserID="UserID02" UserPwd="UserPwd02" UserLevel="165" />
- <User UserID="UserID03" UserPwd="UserPwd03" UserLevel="168" />
- <User UserID="UserID04" UserPwd="UserPwd04" UserLevel="171" />
- <User UserID="UserID05" UserPwd="UserPwd05" UserLevel="175" />
- <User UserID="UserID06" UserPwd="UserPwd06" UserLevel="178" />
- <User UserID="UserID07" UserPwd="UserPwd07" UserLevel="181" />
- <User UserID="UserID08" UserPwd="UserPwd08" UserLevel="184" />
- <User UserID="UserID09" UserPwd="UserPwd09" UserLevel="188" />
- </UserInfo>
- //UserInfo1.xml
- xml version="1.0" encoding="UTF-8" ?>
- <UserInfo>
- <User UserID="UserID00" UserPwd="UserPwd00" UserLevel="158" />
- <User UserID="UserID01" UserPwd="UserPwd01" UserLevel="162" />
- <User UserID="UserID02" UserPwd="UserPwd02" UserLevel="165" />
- <User UserID="UserID03" UserPwd="UserPwd03" UserLevel="168" />
- <User UserID="UserID04" UserPwd="UserPwd04" UserLevel="171" />
- <User UserID="UserID05" UserPwd="UserPwd05" UserLevel="175" />
- <User UserID="UserID06" UserPwd="UserPwd06" UserLevel="178" />
- <User UserID="UserID07" UserPwd="UserPwd07" UserLevel="181" />
- <User UserID="UserID08" UserPwd="UserPwd08" UserLevel="184" />
- <User UserID="UserID09" UserPwd="UserPwd09" UserLevel="188" />
- </UserInfo>
复制代码
7. 产生
- CString strID = _T("");
- CString strPwd = _T("");
- CMarkup xml;
- xml.SetDoc("xml version=\"1.0\" encoding=\"UTF-8\"?>");
- xml.AddElem("UserInfo");
- xml.IntoElem();
- for (int i=0; i<10; i++)
- {
- //产生一个随机数,作为权限
- srand(UINT(time(NULL)+i));
- int nLevel = rand()%256;
- strID.Format("UserID%02d",i);
- strPwd.Format("UserPwd%02d",i);
- xml.AddElem("User");
- xml.AddAttrib("UserID",strID);
- xml.AddAttrib("UserPwd",strPwd);
- xml.AddAttrib("UserLevel",nLevel);
- }
- xml.OutOfElem();
- xml.Save("UserInfo1.xml");
- CString strID = _T("");
- CString strPwd = _T("");
- CMarkup xml;
- xml.SetDoc("xml version=\"1.0\" encoding=\"UTF-8\"?>");
- xml.AddElem("UserInfo");
- xml.IntoElem();
- for (int i=0; i<10; i++)
- {
- //产生一个随机数,作为权限
- srand(UINT(time(NULL)+i));
- int nLevel = rand()%256;
- strID.Format("UserID%02d",i);
- strPwd.Format("UserPwd%02d",i);
- xml.AddElem("User");
- xml.AddAttrib("UserID",strID);
- xml.AddAttrib("UserPwd",strPwd);
- xml.AddAttrib("UserLevel",nLevel);
- }
- xml.OutOfElem();
- xml.Save("UserInfo1.xml");
复制代码
8. 查找
- CMarkup xml;
- BOOL bLoad = false;
- BOOL bFind = false;
- bLoad = xml.Load("UserInfo1.xml");
- if (bLoad)
- {
- CString strID;
- CString strPwd;
- xml.ResetMainPos();
- xml.FindElem(); //UserInfo
- while (xml.FindChildElem("User"))
- {
- strID = xml.GetChildAttrib("UserID");
- strPwd = xml.GetChildAttrib("UserPwd");
- TRACE("\n----id:%s,pwd:%s-------\n",strID,strPwd);
- if (strID=="UserID00"&&strPwd=="UserPwd00")
- {
- bFind = true;
- break;
- }
- }
- }
- if (bFind)
- {
- TRACE("\n---- find------\n");
- }
- else
- {
- TRACE("\n----no find------\n");
- }
- CMarkup xml;
- BOOL bLoad = false;
- BOOL bFind = false;
- bLoad = xml.Load("UserInfo1.xml");
- if (bLoad)
- {
- CString strID;
- CString strPwd;
- xml.ResetMainPos();
- xml.FindElem(); //UserInfo
- while (xml.FindChildElem("User"))
- {
- strID = xml.GetChildAttrib("UserID");
- strPwd = xml.GetChildAttrib("UserPwd");
- TRACE("\n----id:%s,pwd:%s-------\n",strID,strPwd);
- if (strID=="UserID00"&&strPwd=="UserPwd00")
- {
- bFind = true;
- break;
- }
- }
- }
- if (bFind)
- {
- TRACE("\n---- find------\n");
- }
- else
- {
- TRACE("\n----no find------\n");
- }
复制代码
9. 修改
- CMarkup xml;
- BOOL bLoad = false;
- BOOL bFind = false;
- bLoad = xml.Load("UserInfo1.xml");
- if (bLoad)
- {
- CString strID;
- CString strPwd;
- xml.ResetMainPos();
- xml.FindElem(); //UserInfo
- while (xml.FindChildElem("User"))
- {
- strID = xml.GetChildAttrib("UserID");
- strPwd = xml.GetChildAttrib("UserPwd");
- TRACE("\n----id:%s,pwd:%s-------\n",strID,strPwd);
- if (strID=="UserID00"&&strPwd=="UserPwd00")
- {
- bFind = true;
- xml.SetChildAttrib("UserID",strID+CString("Modify"));
- xml.Save("UserInfo1.xml");
- break;
- }
- }
- }
- if (bFind)
- {
- TRACE("\n---- find------\n");
- }
- else
- {
- TRACE("\n----no find------\n");
- }
复制代码
CMarkup字符集问题
daubwu posted @ 2008年9月08日 00:54 in VC with tags XML CMarkup , 38 阅读
CMarkup支持Unicode,_MBCS宏定义。VS默认设置为MBCS宏定义,未设置该宏时为UTF-8编码。
有 MBCS宏定义,且 打开的文件是UTF-8编码:
CMarkup在Load时将UTF-8转换ANSI编码格式,所以要在读取的地方设置
#include <locale.h>
setlocale(LC_ALL, "");
没有MBCS宏定义,且打开的文件是UTF-8编码:
系统默认将文件按UTF-8格式读入系统中,所以显示的时候要手动将数据转换为ANSI格式的进行显示
#include <locale.h>
setlocale(LC_ALL, "");
strVal = CMarkup::UTF8ToA(strVal);
PS:通过strcpy等拷贝函数可以修正。
转载 VC轻松解析XML文件 - CMarkup类的使用方法的更多相关文章
- 转:VC解析XML文件-CMarkup的使用详解
本篇文章是对VC解析XML文件-CMarkup的使用进行了详细的分析介绍,需要的朋友参考下 VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等. 据说tinyX ...
- Android中的几种解析XML文件的类
Ø DOM解析 优点: 1.XML树在内存中完整存储,因此可以直接修改其数据和结构. 2.可以通过该解析器随时访问XML树中的任何一个节点. 3.DOM解析器的API在使用上也相对比较简单. 缺点:如 ...
- Java解析XMl文件之SAX和DOm方法
如题,这两种方法的jar包都在jdk中,不需要下载. 先来说下目录结构: 首先建一个Peron类封装person.xml的属性:DomParseService和SaxParseService分别为两种 ...
- Java中使用DOM4J来生成xml文件和解析xml文件
一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...
- [转载] python 解析xml 文件: SAX方式
环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...
- sax解析xml文件的DefaultHandler处理类
一千年的时光,我无数次掀起岁月的帷幔,只为和你,在某一个平静如水的日子相遇,然后相识,倾情一生,缱绻一世,好美的散文,好吧,我情愿把这个“你”当作android:),使用sax解析xml文件是我见到过 ...
- cocos2d-x 显示中文字符和解析XML文件 转载
源地址:http://codingnow.cn/cocos2d-x/1038.html 在cocos2d-x中直接显示中文的时候会出现乱码,虽然在实际开发中把字符串直接写在代码里也不是好的做法,但是有 ...
- java解析XML文件
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...
- Java进阶(二十七)使用Dom4j解析XML文件
使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...
随机推荐
- Android L 64位兼容32 应用程序的认识
http://blog.csdn.net/louyong0571/article/details/44223481 关于Android L 64位系统兼容32位应用的实现的简单分析. Android ...
- no xxx find in java.library.path
JAVA系统运行时候load native lib时候会遇到下面错误,如 java.lang.UnsatisfiedLinkError: no JSTAF in java.library.path这可 ...
- Python绿色版
Python 安装的时候,有个选项,是问你要安装给所有用户还是只安装给当前用户,你只要选择当前用户,就会把那些需要的 dll ,包括 msvcr90.dll 都给装到 Python 目录下,你只要把 ...
- Cocos2d-x项目移植到WP8系列之八:CCLabelTTF显示中文不换行
原文链接: http://www.cnblogs.com/zouzf/p/3985330.html 在wp8平台上,CCLabeTTF显示中文不会自动换行,看了下源码,原来底层的实现是根据text的空 ...
- TypeScript手册1 - 基本类型和接口
基本类型 像基本的JavaScript一样,TypeScript支持numbers, strings, structures, boolean等基本类型,而扩展的enum等类型,为编程提供了更多帮助. ...
- Ubuntu无法使用root用户登陆的解决办法
对于一个新安装的Ubuntu操作系统,经常会遇到无法使用root用户ssh连接操作系统,比如说root用户的密码被拒绝等原因. 面对这种问题,介绍一下Ubuntu无法使用root登陆解决 1. 修改 ...
- iptables基础知识详解
iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙.如果你是第一 ...
- hadoop 伪分布模式环境搭建
一 安装JDK 下载JDK jdk-8u112-linux-i586.tar.gz 解压JDK hadoop@ubuntu:/soft$ tar -zxvf jdk-8u112-li ...
- Ubuntu 16.04 安装 RabbitMQ
Ubuntu 16.04 安装 RabbitMQ(注意,服务器安全组需要添加15672 和5672端口) #1 更新 $ sudo apt-get update$ sudo apt-get upgra ...
- JavaScript文件下载 兼容所有浏览器 不可跨域
前端文件下载 兼容所有浏览器 download.js文件下载,几乎支持所有类型下载,详细内容参考官网 http://danml.com/download.html 引入文件 <script sr ...