XML相关操作

XML操作一

//----------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添在最后面(使用的是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加在最前面(使用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");
}

 

 

XML操作二

(先讲一下XML中的物殊字符,手动填写时注意一下。

字符                  字符实体
&                      &&
'                      ''
>                      >>
<                      <&<
"                       ""

(创建一个XML文档。

CMarkup xml;
xml.AddElem( "ORDER" );
xml.AddChildElem( "ITEM" );
xml.IntoElem();
xml.AddChildElem( "SN", "132487A-J" );
xml.AddChildElem( "NAME", "crank casing" );
xml.AddChildElem( "QTY", "1" );
xml.Save("c:\\UserInfo.xml");

效果如下:

<ORDER><ITEM><SN>132487A-J</SN><NAME>crank casing</NAME><QTY>1</QTY></ITEM></ORDER>

( 浏览特定元素

CMarkup xml;

xml.Load("UserInfo.xml");while ( xml.FindChildElem("ITEM") )

{

    xml.IntoElem();

    xml.FindChildElem( "SN" );

    CString csSN = xml.GetChildData();

    xml.FindChildElem( "QTY" );

    int nQty = atoi( xml.GetChildData() );

    xml.OutOfElem();

}

()增加元素和属性

添加在最后面,使用的是AddElem;添加在最前面,使用InsertElem。

CMarkup xml;

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", "John Smith");//添加元素

xml.AddElem( "TEL", "555-1234");//添加元素

xml.Save("c:\\UserInfo.xml");

 

效果如下:

<ORDER><ITEM><SN>132487A-J</SN><NAME>crank casing</NAME><QTY>1</QTY></ITEM><ITEM><SN>4238764-A</SN><NAME>bearing</NAME><QTY>15</QTY></ITEM><SHIPMENT><POC type="non-emergency"><NAME>John Smith</NAME><TEL>555-1234</TEL></POC></SHIPMENT></ORDER>

(修改元素和属性

如将POC中的属性type改成:change;

元素TEL改成:123456789

       CMarkup xml;
 if (xml.Load("UserInfo.xml"))
 {
  CString strUserID = _T("");
  xml.ResetMainPos();
  if (xml.FindChildElem("SHIPMENT"))
  {
   xml.IntoElem();
   if (xml.FindChildElem("POC"))
   {
    xml.IntoElem();
    CString str_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的项目。

CMarkup xml;
 if (xml.Load("UserInfo.xml"))
 {
  CString strUserID = _T("");
  xml.ResetMainPos();
  if (xml.FindChildElem("ITEM"))
  {
   xml.IntoElem();
   CString str_sn;
   xml.FindChildElem("SN");
   str_sn=xml.GetChildData();
   if(str_sn=="132487A-J")
   {
    xml.RemoveElem();
    xml.Save("UserInfo.xml");
   }
  }
 }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VC解析XML--使用CMarkup类解析XML (一) 先讲一下XML中的物殊字符,手动填写时注意一下。 字符 字符实体 & &或&#38; ' &apos;或' > >或> < <或&< " "或" (二) CMarkup类的源代码。 这是目前的最新版本; 取出里面的Markup.cpp和Markup.h,导入你的工程里面,CMarkup类就可以用了; (三) 创建一个XML文档。 CMarkup xml; xml.AddElem( "ORDER" ); xml.AddChildElem( "ITEM" ); xml.IntoElem(); xml.AddChildElem( "SN", "132487A-J" ); xml.AddChildElem( "NAME", "crank casing" ); xml.AddChildElem( "QTY", "1" ); xml.Save("c:\\UserInfo.xml"); 效果如下: <ORDER> <ITEM> <SN>132487A-J</SN> <NAME>crank casing</NAME> <QTY>1</QTY> </ITEM> </ORDER>(四) 浏览特定元素CMarkup xml; xml.Load("UserInfo.xml");while ( xml.FindChildElem("ITEM") ) { xml.IntoElem(); xml.FindChildElem( "SN" ); CString csSN = xml.GetChildData(); xml.FindChildElem( "QTY" ); int nQty = atoi( xml.GetChildData() ); xml.OutOfElem(); }(五)增加元素和属性添加在最后面,使用的是AddElem;添加在最前面,使用InsertElem。CMarkup xml;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", "John Smith");//添加元素 xml.AddElem( "TEL", "555-1234");//添加元素 xml.Save("c:\\UserInfo.xml"); 效果如下: <ORDER> <ITEM> <SN>132487A-J</SN> <NAME>crank casing</NAME> <QTY>1</QTY> </ITEM> <ITEM> <SN>4238764-A</SN> <NAME>bearing</NAME> <QTY>15</QTY> </ITEM> <SHIPMENT> <POC type="non-emergency"> <NAME>John Smith</NAME> <TEL>555-1234</TEL> </POC> </SHIPMENT> </ORDER>(六) 修改元素和属性 如将POC中的属性type改成:change; 元素TEL改成:123456789 CMarkup xml; if (xml.Load("UserInfo.xml")) { CString strUserID = _T(""); xml.ResetMainPos(); if (xml.FindChildElem("SHIPMENT")) { xml.IntoElem(); if (xml.FindChildElem("POC")) { xml.IntoElem(); CString str_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的项目。 CMarkup xml; if (xml.Load("UserInfo.xml")) { CString strUserID = _T(""); xml.ResetMainPos(); if (xml.FindChildElem("ITEM")) { xml.IntoElem(); CString str_sn; xml.FindChildElem("SN"); str_sn=xml.GetChildData(); if(str_sn=="132487A-J") { xml.RemoveElem(); xml.Save("UserInfo.xml"); } } }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值