源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

VC解析XML文件-CMarkup的使用详解

  • 时间:2020-10-02 14:12 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:VC解析XML文件-CMarkup的使用详解
VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等。 据说tinyXML很好,可能字符集问题,我编译不了。 所以就用CMarkup来解析,使用过后,觉得非常不错,使用起来很方便。 CMarkup下载地址:http://www.firstobject.com/ 发现网上有方法很法,我就摘下来了
[u]复制代码[/u] 代码如下:
//----------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>
[b]一、生成UserInfo.xml [/b]
[u]复制代码[/u] 代码如下:
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");
[b]二、浏览特定元素 [/b]
[u]复制代码[/u] 代码如下:
//----查看所有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);          }          */    
[u]复制代码[/u] 代码如下:
//-------------结果----------     ---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—
[b]三、修改 [/b]
[u]复制代码[/u] 代码如下:
//--------把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;                     }               }       }
[b]四、添加 [/b]1  添在最后面(使用的是AddElem)
[u]复制代码[/u] 代码如下:
//加在最后面 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>
2  加在最前面(使用InsertElem)
[u]复制代码[/u] 代码如下:
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>
[b]五、删除 [/b]
[u]复制代码[/u] 代码如下:
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;               }       } }
[b]六、查找 [/b]见第二点浏览。类似上面的例子里面没有属性这些东西,下面的一个例子是有属性的
[u]复制代码[/u] 代码如下:
//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>
[b]七、产生 [/b]
[u]复制代码[/u] 代码如下:
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("UserIDd",i);                   strPwd.Format("UserPwdd",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("UserIDd",i);               strPwd.Format("UserPwdd",i);               xml.AddElem("User");               xml.AddAttrib("UserID",strID);               xml.AddAttrib("UserPwd",strPwd);               xml.AddAttrib("UserLevel",nLevel);       }       xml.OutOfElem();       xml.Save("UserInfo1.xml");
[b]八、查找 [/b]
[u]复制代码[/u] 代码如下:
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");       }
[b]九、修改 [/b]
[u]复制代码[/u] 代码如下:
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");           }   
[b]CMarkup字符集问题 [/b]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等拷贝函数可以修正。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部