Markup使用stl操作

在markup.h中添加预编译命令,同时VS项目属性中字符集选择未设置
#define MARKUP_STL

以下操作转自http://www.cctry.com/thread-3866-1-1.html


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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值