文章来源http://www.firstobject.com/dn_markup.htm
(一)XML中的物殊字符
字符 字符实体
& &或&
' '或'
> >或>
< <或&<
" "或"
(二)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");
效果如下:
<span style="font-size:14px;"><ORDER> <ITEM> <SN>132487A-J</SN> <NAME>crank casing</NAME> <QTY>1</QTY> </ITEM> </ORDER></span>
(四)浏览特定元素
<span style="font-size:14px;">CMarkup xml; xml.Load("UserInfo.xml"); ( xml.FindChildElem("ITEM") ) { xml.IntoElem(); xml.FindChildElem( "SN" ); CString csSN = xml.GetChildData(); xml.FindChildElem( "QTY" ); int nQty = atoi( xml.GetChildData() ); xml.OutOfElem(); }</span>
(五)增加元素和属性
添加在最后面,使用的是AddElem;添加在最前面,使用InsertElem。
<span style="font-size:14px;">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"); </span>
效果如下:
<span style="font-size:14px;"><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></span>
如将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、xml.ResetMainPos()的使用
该函数是使得xml的指针重新指向文件的起点,当执行完如下语句后,
<span style="font-size:14px;">while ( xml.FindChildElem("ITEM") ) { xml.IntoElem(); xml.FindChildElem( "SN" ); CString csSN = xml.GetChildData(); xml.OutOfElem(); //执行完该语句后返回外围元素 }</span>
2、创建文档的xml版本号和编码类型
xml.SetDoc("<?xml version=/"1.0/" encoding=/"GB2312/"?>/r/n");