• VC解析XML文件CMarkup


    VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等。
    据说tinyXML很好,可能字符集问题,我编译不了。
    所以就用CMarkup来解析,使用过后,觉得非常不错,使用起来很方便。
    CMarkup类下载地址:http://download.csdn.net/detail/zahxz/7291845

    CMarkup示例下载地址:http://download.csdn.net/detail/zahxz/7291901
    发现网上有方法很法,我就摘下来了

    //----------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

    1. 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----

    1. 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----

    1. 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”-----------

    1. 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)
    //加在最后面

    1. 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. 删除

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

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

    1. //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. 产生

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

    8. 查找

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

    9. 修改

    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 <locale.h>
    setlocale(LC_ALL, "");
    没有MBCS宏定义,且打开的文件是UTF-8编码:
    系统默认将文件按UTF-8格式读入系统中,所以显示的时候要手动将数据转换为ANSI格式的进行显示
    #include <locale.h>
    setlocale(LC_ALL, "");
    strVal = CMarkup::UTF8ToA(strVal);
    PS:通过strcpy等拷贝函数可以修正。

    CMarkup类下载地址:http://download.csdn.net/detail/zahxz/7291845

    CMarkup示例下载地址:http://download.csdn.net/detail/zahxz/7291901

  • 相关阅读:
    [EOJ]2019 ECNU XCPC March Selection #1
    [模板]宏定义
    [POJ]poj1961,poj2406(KMP)
    [模板]KMP
    [CF]Avito Cool Challenge 2018
    [CF]Codeforces Round #528 Div.2
    [POJ]POJ1328(贪心)
    洛谷 P3808 【模板】AC自动机(简单版) 题解
    中科院的难题 题解
    【转】洛谷 P3722 [AH2017/HNOI2017]影魔 题解
  • 原文地址:https://www.cnblogs.com/zahxz/p/2684384.html
Copyright © 2020-2023  润新知