vc中操作Xml--使用CMarkup类

DotNet中使用xml相对比较轻松,在vc中操作xml,有些繁琐。CMarkup比较好用
//----------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—
 
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;
                     }
              }
       }
 
 
 
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>
 
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;
              }
       }
}
 
 
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>
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");
 
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");
       }
 
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");
       }

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值