转载 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. ...
随机推荐
- java MD5Utils 加密工具类
package com.sicdt.library.core.utils; import java.io.File; import java.io.FileInputStream; import ja ...
- 【HackerRank】Insertion Sort Advanced Analysis(归并排序求数列逆序数对)
Insertion Sort is a simple sorting technique which was covered in previous challenges. Sometimes, ar ...
- 测试 js 方法运行时间
早期测速的时候是这样的,呵呵呵,一开始还挺爽的 function testFunctionTime(fn) { var start = new Date().getTime(); if (fn) fn ...
- Mysql主从复制原理详解
一.为什么要做主从同步 1.读写分离,降低对主数据库的IO消耗 2.避免数据丢失 3.提高业务系统性能 二.主从同步和集群的区别 1.主从同步 一般需要两台及以上数据库服务器即可(一台用于写入数据,一 ...
- windows环境下安装部署并启用zkui的web图形界面
在此之前的工作:不是本机部署的三个服务器最为伪集群的zookeeper环境,并将三个为服务启动起来. 然后才有了下面的工作. 1. 首先,zkui项目地址:https://github.com/Dee ...
- 第二节课-Data-driven approach:KNN和线性分类器分类图片
2017-08-12 1.图片分类是很多CV任务的基础: 2.图片分类要面临很多的问题,比如图片被遮挡,同一种动物有很多种颜色,形状等等,算法需要足够强壮: 3.所以很难直接写出程序来进行图片分类,常 ...
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component...
今天开发犯了一个特lowB的错,记录下来,引以为戒! 严重: A child container failed during start java.util.concurrent.ExecutionE ...
- excel比较筛选两列不一样的数据
在excel表中,罗列两列数据,用B列数据与A列比较,筛选出B列中哪些数据不同,并用红色标记出来. 首先选中B列.直接鼠标左键点击B列即可选中."开始"--->&qu ...
- UvaLive 5811 概率DP
题意 : 有54张牌 问抽多少张牌能使每种花色都至少是给定的数字 两张王牌可以被选择为任何花色 高放学长真是太腻害辣! 设置dp[][][][][x][y] 前四维代表四种真的花色的数量 后两维xy代 ...
- 将本地jar包制作成maven依赖
首先,需要配置maven环境,如果没配置,传送门:http://www.cnblogs.com/hyyq/p/6557683.html 然后,需要一个ben地的jar包,这里以阿里云支付宝sdk为例, ...