CMarkup类在VC中的使用
?首先到http://www.firstobject.com/dn_markup.htm上面下載CMarkup類,將CMarkup.cpp和CMarkup.h導入到我們的工程中就可以了。編譯可能會出現問題,解決的方法是在CMarkup.cpp的開頭加上#include <stdafx.h>,或者關閉預編譯也可以。
1、創建一個XML文檔
對于創建一個XML文檔,需要實例化一個CMarkup對象,并調用AddElem創建根元素。在這個位置,如果你調用?AddElem("School")?,文檔會簡單的裝一個空元素<School/>.?然后調用AddChildElem?在根元素的下面創建元素。
1?????CMarkup?xml;?2?????xml.SetDoc("<?xml?version=\"1.0\"?encoding=\"UTF-8\"?>\r\n");
?3?????xml.AddElem("School");
?4?????xml.IntoElem();
?5?????xml.AddElem("Department","Automation");
?6?????xml.AddElem("Department","Computer");
?7?????xml.AddElem("Department","Math");
?8?????xml.AddElem("Department","English");
?9?????xml.OutOfElem();
10?????xml.Save("School.xml");
效果如下:
?
1<?xml?version="1.0"?encoding="UTF-8"?>2<School>
3????<Department>Automation</Department>
4????<Department>Computer</Department>
5????<Department>Math</Department>
6????<Department>English</Department>
7</School>
8
2、瀏覽特定元素
?2?????xml.Load("School.xml");
?3?????BOOL?bFind=TRUE;
?4?????xml.ResetMainPos();
?5?????
?6?????while(xml.FindChildElem("Department"))
?7?????{
?8?????????CString?strTagName=_T("");
?9?????????CString?strData=_T("");
10?????????strTagName=xml.GetChildTagName();????//此時節點是父節點
11?????????strData=xml.GetChildData();
12?????????TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
13?????}
//***********************這樣也可以*****************************/
?2?????xml.Load("School.xml");
?3?????BOOL?bFind?=?TRUE;
?4?????xml.ResetMainPos();
?5?????
?6?????while?(xml.FindChildElem("Department"))????????
?7?????{
?8?????????xml.IntoElem();
?9?????????CString?strTagName?=?_T("");
10?????????CString?strData?=?_T("");
11?????????strTagName?=?xml.GetTagName();
12?????????strData?=?xml.GetData();
13?????????TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
14?????????xml.OutOfElem();
15?????}
//***********************或者這樣也可以***************************/
?2?????xml.Load("School.xml");
?3?????BOOL?bFind?=?TRUE;
?4?????xml.ResetMainPos();
?5?????xml.FindElem();??//School
?6?????xml.IntoElem();
?7?????
?8?????while?(xml.FindElem("Department"))
?9?????{
10?????????CString?strTagName?=?_T("");
11?????????CString?strData?=?_T("");
12?????????strTagName?=?xml.GetTagName();
13?????????strData?=?xml.GetData();
14?????????TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
15?????}
//***********結果**************
????? ---tagName:Department,Data:Automation--
---tagName:Department,Data:Computer--
---tagName:Department,Data:Math--
---tagName:Department,Data:English--
3、修改元素
//把Department為”English“改為”Chinese“
?2?????BOOL?bLoadXml=FALSE;
?3?????bLoadXml=xml.Load("School.xml");
?4?
?5?????if(bLoadXml)
?6?????{
?7?????????CString?str=_T("");
?8?????????xml.ResetMainPos();
?9?????????xml.FindElem();
10?????????xml.IntoElem();
11?????????while(xml.FindElem("Department"))
12?????????{
13?????????????str=xml.GetData();
14?????????????if(str=="English")
15?????????????{
16?????????????????xml.SetData("Chinese");
17?????????????????xml.Save("School.xml");
18?????????????????break;
19?????????????}
20?????????}
21?????}
效果如下:
2<School>
3????<Department>Automation</Department>
4????<Department>Computer</Department>
5????<Department>Math</Department>
6????<Department>Chinese</Department>
7</School>
8
4、添加
4、1 添加在最后面(用AddElem)
?2?????BOOL?bLoadXml=FALSE;
?3?????bLoadXml=xml.Load("School.xml");
?4?????if(bLoadXml)
?5?????{
?6?????????xml.ResetMainPos();
?7?????????xml.FindElem();
?8?????????xml.IntoElem();
?9?????????xml.AddElem("Department","SiQinghua");
10?????????xml.OutOfElem();
11?????????xml.Save("School.xml");
12?????}
效果如下:
2<School>
3????<Department>Automation</Department>
4????<Department>Computer</Department>
5????<Department>Math</Department>
6????<Department>Chinese</Department>
7????<Department>SiQinghua</Department>
8</School>
4、2 添加在最前面(用InsertElem)
?2?????BOOL?bLoadXml=FALSE;
?3?????bLoadXml=xml.Load("School.xml");
?4?????if(bLoadXml)
?5?????{
?6?????????xml.ResetMainPos();
?7?????????xml.FindElem();
?8?????????xml.IntoElem();
?9?????????xml.AddElem("Department","SiQinghua");
10?????????xml.OutOfElem();
11?????????xml.Save("School.xml");
12?????}
效果如下:
?2<School>
?3????<Department>NARI</Department>
?4????<Department>Automation</Department>
?5????<Department>Computer</Department>
?6????<Department>Math</Department>
?7????<Department>Chinese</Department>
?8????<Department>SiQinghua</Department>
?9</School>
10
5、刪除
?2?????BOOL?bLoadXml=FALSE;
?3?????bLoadXml=xml.Load("School.xml");
?4?????if(bLoadXml)
?5?????{
?6?????????BOOL?bFind=TRUE;
?7?????????xml.ResetMainPos();
?8?????????while(bFind)
?9?????????{
10?????????????bFind=xml.FindChildElem("Department");
11?????????????if(bFind)
12?????????????{
13?????????????????CString?strData=_T("");
14?????????????????strData=xml.GetChildData();????//此時節點還是父節點
15?????????????????if("SiQinghua"==strData)
16?????????????????{
17?????????????????????xml.RemoveChildElem();
18?????????????????????xml.Save("School.xml");
19?????????????????????break;
20?????????????????}
21?????????????}
22?????????}
23?????}
效果如下:
2?<School>
3?????<Department>NARI</Department>
4?????<Department>Automation</Department>
5?????<Department>Computer</Department>
6?????<Department>Math</Department>
7?????<Department>Chinese</Department>
8?</School>
9?
上面的例子都是不帶屬性的,下面舉一個帶有屬性的例子。
1、生成XML文檔
?2?????xml.SetDoc("<?xml?version=\"1.0\"?encoding=\"UTF-8\"?>");
?3?????xml.AddElem("UserInfo");
?4?????xml.IntoElem();
?5?????for(int?i=0;i<10;i++)
?6?????{
?7?????????CString?strID=_T("");
?8?????????CString?strPwd=_T("");
?9?
10?????????srand(UINT(time(NULL)+i));?//產生一個隨機數
11?????????int?nLevel=rand()%256;
12?
13?????????strID.Format("UserID%02d",i);
14?????????strPwd.Format("UserPwd%02d",i);
15?
16?????????xml.AddElem("User");
17?????????xml.AddAttrib("UserID",strID);
18?????????xml.AddAttrib("UserPwd",strPwd);
19?????????xml.AddAttrib("UserLevel",nLevel);
20?????}
21?????xml.OutOfElem();
22?????xml.Save("UserInfo.xml");
效果如下:
?2<UserInfo>
?3????<User?UserID="UserID00"?UserPwd="UserPwd00"?UserLevel="85"/>
?4????<User?UserID="UserID01"?UserPwd="UserPwd01"?UserLevel="88"/>
?5????<User?UserID="UserID02"?UserPwd="UserPwd02"?UserLevel="92"/>
?6????<User?UserID="UserID03"?UserPwd="UserPwd03"?UserLevel="95"/>
?7????<User?UserID="UserID04"?UserPwd="UserPwd04"?UserLevel="98"/>
?8????<User?UserID="UserID05"?UserPwd="UserPwd05"?UserLevel="101"/>
?9????<User?UserID="UserID06"?UserPwd="UserPwd06"?UserLevel="105"/>
10????<User?UserID="UserID07"?UserPwd="UserPwd07"?UserLevel="108"/>
11????<User?UserID="UserID08"?UserPwd="UserPwd08"?UserLevel="111"/>
12????<User?UserID="UserID09"?UserPwd="UserPwd09"?UserLevel="115"/>
13</UserInfo>
14
2、查找特定屬性
?2?????BOOL?bLoadXml=FALSE;
?3?????BOOL?bFind=FALSE;
?4?????bLoadXml=xml.Load("UserInfo.xml");
?5?????if(bLoadXml)
?6?????{
?7?????????CString?strID;
?8?????????CString?strPwd;
?9?????????xml.ResetMainPos();
10?????????xml.FindElem();????//UserInfo
11?????????while(xml.FindChildElem("User"))
12?????????{
13?????????????strID=xml.GetChildAttrib("UserID");
14?????????????strPwd=xml.GetChildAttrib("UserPwd");
15?????????????TRACE("\n---id:%s,pwd:%s---\n",strID,strPwd);
16?????????????if(strID=="UserID02"?&&?strPwd=="UserPwd02")
17?????????????{
18?????????????????bFind=TRUE;
19?????????????????break;
20?????????????}
21?????????}
22?????}
23?????if(bFind==TRUE)
24?????????TRACE("\n---find---\n");
25?????else
26?????????TRACE("\n---not?find---\n");
3、修改特定屬性
?2?????BOOL?bFind=FALSE;
?3?????BOOL?bLoadXml=FALSE;
?4?????bLoadXml=xml.Load("UserInfo.xml");
?5?????if(bLoadXml)
?6?????{
?7?????????CString?strID;
?8?????????CString?strPwd;
?9?????????xml.ResetMainPos();
10?????????xml.FindElem();????//UserInfo
11?????????while(xml.FindChildElem("User"))
12?????????{
13?????????????strID=xml.GetChildAttrib("UserID");
14?????????????strPwd=xml.GetChildAttrib("UserPwd");
15?????????????TRACE("\n--id:%s,pwd:%s--\n",strID,strPwd);
16?????????????if(strID=="UserID02"?&&?strPwd=="UserPwd02")
17?????????????{
18?????????????????bFind=TRUE;
19?????????????????xml.SetChildAttrib("UserID",strID+CString("Modified"));
20?????????????????xml.Save("UserInfo.xml");
21?????????????????break;
22?????????????}
23?????????}
24?????}
25?????if(bFind==TRUE)
26?????????TRACE("\n---find---\n");
27?????else
28?????????TRACE("\n---not?find---\n");
效果如下:
?2<UserInfo>
?3????<User?UserID="UserID00"?UserPwd="UserPwd00"?UserLevel="85"/>
?4????<User?UserID="UserID01"?UserPwd="UserPwd01"?UserLevel="88"/>
?5????<User?UserID="UserID02Modified"?UserPwd="UserPwd02"?UserLevel="92"/>
?6????<User?UserID="UserID03"?UserPwd="UserPwd03"?UserLevel="95"/>
?7????<User?UserID="UserID04"?UserPwd="UserPwd04"?UserLevel="98"/>
?8????<User?UserID="UserID05"?UserPwd="UserPwd05"?UserLevel="101"/>
?9????<User?UserID="UserID06"?UserPwd="UserPwd06"?UserLevel="105"/>
10????<User?UserID="UserID07"?UserPwd="UserPwd07"?UserLevel="108"/>
11????<User?UserID="UserID08"?UserPwd="UserPwd08"?UserLevel="111"/>
12????<User?UserID="UserID09"?UserPwd="UserPwd09"?UserLevel="115"/>
13</UserInfo>
?
轉載于:https://www.cnblogs.com/monkeyfeng/p/4649555.html
總結
以上是生活随笔為你收集整理的CMarkup类在VC中的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 九度oj题目1385:重建二叉树
- 下一篇: 平衡二叉查找树 AVL 的实现