开发者社区> xumaojun> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

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等拷贝函数可以修正。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ASP.NET Core静态文件的使用方法
静态文件(HTML,CSS,图片和Javascript之类的资源)会被ASP.NET Core应用直接提供给客户端。 静态文件通常位于网站根目录(web root) <content-root>/wwwroot文件夹下。通常会把项目的当前目录设置为Content root,这样项目的web root就可以在开发阶段被明确。
25 0
vue3初体验-全局组件使用方法
vue3初体验-全局组件使用方法
68 0
【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
65 0
转载 VC轻松解析XML文件 - CMarkup类的使用方法
VC轻松解析XML文件 - CMarkup类的使用方法http://www.cctry.com/thread-3866-1-1.html VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等。
1026 0
vc中播放mp3文件的方法小结
一般播放MP3常见的有两种方法,一种是自己解码,另外一种用系统的库,比如MCI,当然如果可以用控件直接用个控件会更方便。 1.      使用mci   #include #include #include #include #include   #pragma comment(lib,"winmm.
1026 0
使用VC取得文件关联图标的方法
一个简单的学习加强实例,用VC取得文件的关联图标,看下面的代码一起来学习下! CFileDialog fileDialog( TRUE,"*.*",NULL,NULL,NULL); if (fileDialog.
591 0
+关注
xumaojun
乐于学习与分析
1078
文章
95
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载