VC++中利用CMarkup类对XML文件的操作.docx
- 文档编号:6255968
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:14
- 大小:16.81KB
VC++中利用CMarkup类对XML文件的操作.docx
《VC++中利用CMarkup类对XML文件的操作.docx》由会员分享,可在线阅读,更多相关《VC++中利用CMarkup类对XML文件的操作.docx(14页珍藏版)》请在冰豆网上搜索。
VC++中利用CMarkup类对XML文件的操作
(一)先讲一下XML中的物殊字符,手动填写时注意一下。
字符 字符实体
& &或&
' '或'
> >或>
< <或&<
" "或"
(二)CMarkup类的源代码。
这是目前的最新版本;
这是官网示例文件,取出里面的Markup.cpp和Markup.h,导入你的工程里面,CMarkup类就可以用了;
下载地址:
(三)创建一个XML文档。
CMarkupxml;
xml.AddElem("ORDER");
xml.AddChildElem("ITEM");
xml.IntoElem();
xml.AddChildElem("SN","132487A-J");
xml.AddChildElem("NAME","crankcasing");
xml.AddChildElem("QTY","1");
xml.Save("c:
\\UserInfo.xml");
效果如下:
(四)浏览特定元素
CMarkupxml;xml.Load("UserInfo.xml");
while(xml.FindChildElem("ITEM"))
{ xml.IntoElem();
xml.FindChildElem("SN");
CStringcsSN=xml.GetChildData();
xml.FindChildElem("QTY");
intnQty=atoi(xml.GetChildData());
xml.OutOfElem();}
(五)增加元素和属性
添加在最后面,使用的是AddElem;添加在最前面,使用InsertElem。
CMarkupxml;
xml.Load("c:
\\UserInfo.xml");
xml.AddElem("ORDER");
xml.IntoElem();//进入ORDER
xml.AddElem("ITEM");
xml.IntoElem();//进入ITEM
xml.AddElem("SN","4238764-A");//添加元素
xml.AddElem("NAME","bearing");//添加元素
xml.AddElem("QTY","15");//添加元素
xml.OutOfElem();//退出ITEM
xml.AddElem("SHIPMENT");
xml.IntoElem();//进入SHIPMENT
xml.AddElem("POC");//添加元素
xml.SetAttrib("type","non-emergency");//添加属性
xml.IntoElem();//进入POC
xml.AddElem("NAME","JohnSmith");//添加元素
xml.AddElem("TEL","555-1234");//添加元素xml.Save("c:
\\UserInfo.xml");
效果如下:
(六)修改元素和属性
如将POC中的属性type改成:
change;
元素TEL改成:
123456789
CMarkupxml;
if(xml.Load("UserInfo.xml"))
{
CStringstrUserID=_T("");
xml.ResetMainPos();
if(xml.FindChildElem("SHIPMENT"))
{
xml.IntoElem();
if(xml.FindChildElem("POC"))
{
xml.IntoElem();
CStringstr_type=xml.GetAttrib("type");
MessageBox(str_type);
xml.SetAttrib("type","change");
strUserID=xml.GetData();
if(xml.FindChildElem("TEL"))
{
xml.IntoElem();
xml.SetData("123456789");
xml.Save("UserInfo.xml");
return;
}
}
}
}
(七)删除元素
删除SN=132487A-J的项目。
CMarkupxml;
if(xml.Load("UserInfo.xml"))
{
CStringstrUserID=_T("");
xml.ResetMainPos();
if(xml.FindChildElem("ITEM"))
{
xml.IntoElem();
CStringstr_sn;
xml.FindChildElem("SN");
str_sn=xml.GetChildData();
if(str_sn=="132487A-J")
{
xml.RemoveElem();
xml.Save("UserInfo.xml");
}
}
}
DotNet中使用xml相对比较轻松,在vc中操作xml,有些繁琐。
最近在网络上得知CMarkup比较好用,于是试了下,还好,就把部分例子写出来。
以后有时间的话,再写清楚点
//----------UserInfo.xml--------------
xmlversion="1.0"encoding="UTF-8"?
>
1。
生成UserInfo.xml
CMarkupxml;
xml.SetDoc("
xmlversion=\"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----
CMarkupxml;
xml.Load("UserInfo.xml");
BOOLbFind=true;
xml.ResetMainPos();
while(xml.FindChildElem("UserID");)
{
//此时接点还是父接点
CStringstrTagName=_T("");
CStringstrData=_T("");
strTagName=xml.GetChildTagName();
strData=xml.GetChildData();
TRACE("\n---tagName:
%s,Data:
%s--\n",strTagName,strData);
}
/********************这样也可以******************
CMarkupxml;
xml.Load("UserInfo.xml");
BOOLbFind=true;
xml.ResetMainPos();
while(xml.FindChildElem("UserID");)
{
xml.IntoElem();
CStringstrTagName=_T("");
CStringstrData=_T("");
strTagName=xml.GetTagName();
strData=xml.GetData();
TRACE("\n---tagName:
%s,Data:
%s--\n",strTagName,strData);
xml.OutOfElem();
}*/
/**************这样也可以**********************
CMarkupxml;
xml.Load("UserInfo.xml");
BOOLbFind=true;
xml.ResetMainPos();
xml.FindElem();//UserInfo
xml.IntoElem();
while(xml.FindElem("UserID");)
{
CStringstrTagName=_T("");
CStringstrData=_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”-----------
BOOLbLoadXml=false;
CMarkupxml;
bLoadXml=xml.Load("UserInfo.xml");
if(bLoadXml)
{
CStringstrUserID=_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)
//加在最后面
BOOLbLoadXml=false;
CMarkupxml;
bLoadXml=xml.Load("UserInfo.xml");
if(bLoadXml)
{
xml.ResetMainPos();
xml.FindElem();
xml.IntoElem();
xml.AddElem("UserID","luoluo");
xml.OutOfElem();
xml.Save("UserInfo.xml");
}
//--------原来为------
xmlversion="1.0"encoding="UTF-8"?
>
//---------添加后为-------------
xmlversion="1.0"encoding="UTF-8"?
>
4。
2加在最前面(使用InsertElem)
BOOLbLoadXml=false;
CMarkupxml;
bLoadXml=xml.Load("UserInfo.xml");
if(bLoadXml)
{
xml.ResetMainPos();
xml.FindElem();
xml.IntoElem();
xml.InsertElem("UserID","AddUserIDHead");
xml.OutOfElem();
xml.Save("UserInfo.xml");
}
//----原来为—
xmlversion="1.0"encoding="UTF-8"?
>
//------修改后-----
xmlversion="1.0"encoding="UTF-8"?
>
5。
删除
CMarkupxml;
xml.Load("UserInfo.xml");
BOOLbFind=true;
xml.ResetMainPos();
while(bFind)
{
bFind=xml.FindChildElem("UserID");
if(bFind)
{
//此时接点还是父接点
CStringstrData=_T("");
strData=xml.GetChildData();
if(strData=="luo")
{
xml.RemoveChildElem();
xml.Save("UserInfo.xml");
break;
}
}
}
6。
查找
见第二点浏览。
类似
上面的例子里面没有属性这些东西,下面的一个例子是有属性的
//UserInfo1.xml
xmlversion="1.0"encoding="UTF-8"?
>
7。
产生
CStringstrID=_T("");
CStringstrPwd=_T("");
CMarkupxml;
xml.SetDoc("
xmlversion=\"1.0\"encoding=\"UTF-8\"?
>");
xml.AddElem("UserInfo");
xml.IntoElem();
for(inti=0;i<10;i++)
{
//产生一个随机数,作为权限
srand(UINT(time(NULL)+i));
intnLevel=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。
查找
CMarkupxml;
BOOLbLoad=false;
BOOLbFind=false;
bLoad=xml.Load("UserInfo1.xml");
if(bLoad)
{
CStringstrID;
CStringstrPwd;
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----nofind------\n");
}
9。
修改
CMarkupxml;
BOOLbLoad=false;
BOOLbFind=false;
bLoad=xml.Load("UserInfo1.xml");
if(bLoad)
{
CStringstrID;
CStringstrPwd;
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----nofind------\n");
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 利用 CMarkup XML 文件 操作