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");
}
http://blog.youkuaiyun.com/byxdaz/archive/2006/04/17/666688.aspx