VC轻松解析XML文件 - CMarkup类的使用方法

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介:

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" ?>

luo
lin

//----------UserInfo.xml--------------
xml version="1.0" encoding="UTF-8" ?>

luo
lin

复制代码

  1. 生成UserInfo.xml

CMarkup xml;
xml.SetDoc("xml version="1.0" encoding="UTF-8"?>rn");
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"?>rn");
xml.AddElem("UserInfo");
xml.IntoElem();
xml.AddElem("UserID","luo");
xml.AddElem("UserID","lin");
xml.OutOfElem();
xml.Save("UserInfo.xml");
复制代码

  1. 浏览特定元素
    //----查看所有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—

  1. 修改

//--------把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; 
                } 
          } 
  }

复制代码

  1. 添加

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" ?>

luo
lin

//---------添加后为-------------
xml version="1.0" encoding="UTF-8" ?>

luo
lin
luoluo

复制代码
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" ?>

luo
lin

//------修改后-----
xml version="1.0" encoding="UTF-8" ?>

AddUserIDHead
luo
lin

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" ?>

luo
lin

//------修改后-----
xml version="1.0" encoding="UTF-8" ?>

AddUserIDHead
luo
lin

复制代码

  1. 删除

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; 
          } 
  } 

}
复制代码

  1. 查找
    见第二点浏览。类似上面的例子里面没有属性这些东西,下面的一个例子是有属性的

//UserInfo1.xml
xml version="1.0" encoding="UTF-8" ?>












//UserInfo1.xml
xml version="1.0" encoding="UTF-8" ?>












复制代码

  1. 产生

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");

复制代码

  1. 查找

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"); 
  }

复制代码

  1. 修改

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

setlocale(LC_ALL, "");
没有MBCS宏定义,且打开的文件是UTF-8编码:
系统默认将文件按UTF-8格式读入系统中,所以显示的时候要手动将数据转换为ANSI格式的进行显示

include

setlocale(LC_ALL, "");
strVal = CMarkup::UTF8ToA(strVal);
PS:通过strcpy等拷贝函数可以修正。

目录
相关文章
|
1月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
3月前
|
数据可视化 数据挖掘 BI
团队管理者必读:高效看板类协同软件的功能解析
在现代职场中,团队协作的效率直接影响项目成败。看板类协同软件通过可视化界面,帮助团队清晰规划任务、追踪进度,提高协作效率。本文介绍看板类软件的优势,并推荐五款优质工具:板栗看板、Trello、Monday.com、ClickUp 和 Asana,助力团队实现高效管理。
95 2
|
4天前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
43 15
|
14天前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
38 5
|
25天前
|
Java 数据库 开发者
详细介绍SpringBoot启动流程及配置类解析原理
通过对 Spring Boot 启动流程及配置类解析原理的深入分析,我们可以看到 Spring Boot 在启动时的灵活性和可扩展性。理解这些机制不仅有助于开发者更好地使用 Spring Boot 进行应用开发,还能够在面对问题时,迅速定位和解决问题。希望本文能为您在 Spring Boot 开发过程中提供有效的指导和帮助。
75 12
|
17天前
|
机器学习/深度学习 人工智能 监控
鸿蒙赋能智慧物流:AI类目标签技术深度解析与实践
在数字化浪潮下,物流行业面临变革,传统模式的局限性凸显。AI技术为物流转型升级注入动力。本文聚焦HarmonyOS NEXT API 12及以上版本,探讨如何利用AI类目标签技术提升智慧物流效率、准确性和成本控制。通过高效数据处理、实时监控和动态调整,AI技术显著优于传统方式。鸿蒙系统的分布式软总线技术和隐私保护机制为智慧物流提供了坚实基础。从仓储管理到运输监控再到配送优化,AI类目标签技术助力物流全流程智能化,提高客户满意度并降低成本。开发者可借助深度学习框架和鸿蒙系统特性,开发创新应用,推动物流行业智能化升级。
|
1月前
|
安全 编译器 C语言
【C++篇】深度解析类与对象(中)
在上一篇博客中,我们学习了C++类与对象的基础内容。这一次,我们将深入探讨C++类的关键特性,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载、以及取地址运算符的重载。这些内容是理解面向对象编程的关键,也帮助我们更好地掌握C++内存管理的细节和编码的高级技巧。
|
1月前
|
存储 程序员 C语言
【C++篇】深度解析类与对象(上)
在C++中,类和对象是面向对象编程的基础组成部分。通过类,程序员可以对现实世界的实体进行模拟和抽象。类的基本概念包括成员变量、成员函数、访问控制等。本篇博客将介绍C++类与对象的基础知识,为后续学习打下良好的基础。
|
5月前
|
存储 Java API
详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
【10月更文挑战第19天】深入剖析Java Map:不仅是高效存储键值对的数据结构,更是展现设计艺术的典范。本文从基本概念、设计艺术和使用技巧三个方面,详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
111 3
|
5月前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器

推荐镜像

更多