CMarkup類操作Xml總結


一、下載Markup.cpp 和 Markup.h

下載地址:http://www.firstobject.com/dn_markup.htm  解壓縮

二、將此兩個文件放置於工程目錄下

三、在需要用到CMarkup的地方 #include "Markup.h" 

當然VC中還需要配置一下環境

在VC6.0下:

a.在Markup.cpp的頂端加上 #include"stdafx.h" 或者

b.關閉Markup.cpp的預編譯頭設置,具體方法如下:

  Project->Setting  彈出ProjectSetting對話框,在左邊的文件樹下選擇Markup.cpp,然后在 "Settings for" 下拉框下選擇 "All Configurations",選擇 C/C++標簽頁,

接着在Category下拉框下選中 "Precompiled Headers"選項,選中下面的"Not Using Precompiled Headers." 單選按鈕即可

CMarkup的基本使用:

例如要讀取如下UserInfos.xml的內容

 1   <?xml version="1.0" encoding="UTF-8" ?>   
2 <UserInfos>
3 <UserInfo>
4 <name>WangYao</name>
5 <age>25</age>
6 </UserInfo>
7 <UserInfo>
8 <name>Hisin</name>
9 <age>27</age>
10 </UserInfo>
11 </UserInfos>

源代碼如下:

 1 CMarkup xml;  
2 bool flag;
3
4 //加載Xml文件
5 flag = xml.Load("d:\\UserInfos.xml");
6 if (!flag)
7 {
8 AfxMessageBox(TEXT("加載d:\\UserInfos.xml失敗,請檢查"));
9 return;
10 }
11
12 //定位到Root Elem
13 xml.ResetPos();
14 flag = xml.FindElem("UserInfos"); //Root Elem為<UserInfos></UserInfos>
15 if (!flag)
16 {
17 return;
18 }
19
20 xml.IntoElem(); //進入根節點
21 while(xml.FindElem(TEXT("UserInfo")))
22 {
23 xml.IntoElem(); //進入<UserInfo></UserInfo>
24
25 //獲取name節點數據
26 flag = xml.FindElem(TEXT("name"));
27 if (flag)
28 {
29 CString cstrName;
30 cstrName = xml.GetData();
31 AfxMessageBox(cstrName);
32 }
33
34 //獲取age節點數據
35 xml.ResetMainPos(); //保證不管name節點和age節點的順序如何,都能找到age節點
36 flag = xml.FindElem(TEXT("age"));
37 if (flag)
38 {
39 CString cstrAge;
40 cstrAge = xml.GetData();
41 AfxMessageBox(cstrAge);
42 }
43
44 xml.OutOfElem(); //跳出<UserInfo></UserInfo>
45 }
46 xml.OutOfElem(); //跳出根節點

當然實現同樣的功能也可以不進入UserInfo節點,源碼如下,請仔細對比

 1 xml.IntoElem();   //進入根節點  
2 while(xml.FindElem(TEXT("UserInfo")))
3 {
4 //獲取name子節點數據
5 flag = xml.FindChildElem(TEXT("name"));
6 if (flag)
7 {
8 CString cstrName;
9 cstrName = xml.GetChildData();
10 AfxMessageBox(cstrName);
11 }
12
13 //獲取age子節點數據
14 xml.ResetChildPos(); //保證不管name子節點和age子節點的順序如何,都能找到age子節點
15 flag = xml.FindChildElem(TEXT("age"));
16 if (flag)
17 {
18 CString cstrAge;
19 cstrAge = xml.GetChildData();
20 AfxMessageBox(cstrAge);
21 }
22 }
23 xml.OutOfElem(); //跳出根節點

具體CMarkup類方法的使用請參閱官方網站上的詳細說明:http://www.firstobject.com/dn_markupmethods.htm

Tips:

1.IntoElem與OutOfElem方法應成對使用

2.關於重置xml的Pos的函數

ResetPos Resets the current position to the start of the document
ResetMainPos Resets the current main position to before the first sibling
ResetChildPos Resets the current child position to before the first child

 3.SavePos 與 RestorePos 復原xml Pos

SavePos Saves the current position with an optional string name using a hash map
RestorePos Goes to the position saved with SavePos

比如:

...

xml.SavePos(Text("abc"));

OpXml(xml);  //該函數可能會改變xml的Pos,則可以利用SavePos與RestorePos復原該函數執行前xml的Pos

xml.RestorePos(Text("abc"));

...




 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM