日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C++ TinyXML使用心得總結(jié)

C++語言是一種應(yīng)用非常廣泛的計(jì)算機(jī)應(yīng)用編程語言。它支持多種程序設(shè)計(jì)風(fēng)格,對(duì)程序員在實(shí)際開發(fā)中起了非常重要的作用。在這里我們先為大家介紹一個(gè)C++ XML解析器中叫做C++ TinyXML的解析器相關(guān)內(nèi)容。

讀取和設(shè)置xml配置文件是最常用的操作,試用了幾個(gè)C++的XML解析器,個(gè)人感覺C++ TinyXML是使用起來最舒服的,因?yàn)樗腁PI接口和Java的十分類似,面向?qū)ο笮院芎谩?/p>

C++ TinyXML是一個(gè)開源的解析XML的解析庫,能夠用于C++,能夠在Windows或Linux中編譯。這個(gè)解析庫的模型通過解析XML文件,然后在內(nèi)存中生成DOM模型,從而讓我們很方便的遍歷這棵XML樹。

DOM模型即文檔對(duì)象模型,是將整個(gè)文檔分成多個(gè)元素(如書、章、節(jié)、段等),并利用樹型結(jié)構(gòu)表示這些元素之間的順序關(guān)系以及嵌套包含關(guān)系。

如下是一個(gè)XML片段:

 
 
 
  1. < Persons> 
  2. < Person ID="1"> 
  3. < name>周星星< /name> 
  4. < age>20< /age> 
  5. < /Person> 
  6. < Person ID="2"> 
  7. < name>白晶晶< /name> 
  8. < age>18< /age> 
  9. < /Person> 
  10. < /Persons> 

在C++ TinyXML中,根據(jù)XML的各種元素來定義了一些類:#t#

TiXmlBase:整個(gè)TinyXML模型的基類。

TiXmlAttribute:對(duì)應(yīng)于XML中的元素的屬性。

TiXmlNode:對(duì)應(yīng)于DOM結(jié)構(gòu)中的節(jié)點(diǎn)。

TiXmlComment:對(duì)應(yīng)于XML中的注釋

TiXmlDeclaration:對(duì)應(yīng)于XML中的申明部分,即< ?versiong="1.0" ?>。

TiXmlDocument:對(duì)應(yīng)于XML的整個(gè)文檔。

TiXmlElement:對(duì)應(yīng)于XML的元素。

TiXmlText:對(duì)應(yīng)于XML的文字部分

TiXmlUnknown:對(duì)應(yīng)于XML的未知部分。

TiXmlHandler:定義了針對(duì)XML的一些操作。

C++ TinyXML是個(gè)解析庫,主要由DOM模型類(TiXmlBase、TiXmlNode、TiXmlAttribute、TiXmlComment、TiXmlDeclaration、TiXmlElement、TiXmlText、TiXmlUnknown)和操作類(TiXmlHandler)構(gòu)成。它由兩個(gè)頭文件(.h文件)和四個(gè)CPP文件(.cpp文件)構(gòu)成,用的時(shí)候,只要將(tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)導(dǎo)入工程就可以用它的東西了。如果需要,可以將它做成自己的DLL來調(diào)用。舉個(gè)例子就可以說明一切。。。

對(duì)應(yīng)的XML文件:

 
 
 
  1. < Persons> 
  2. < Person ID="1"> 
  3. < name>phinecos< /name> 
  4. < age>22< /age> 
  5. < /Person> 
  6. < /Persons> 

讀寫XML文件的程序代碼:

 
 
 
  1. #include < iostream> 
  2. #include "tinyxml.h"  
  3. #include "tinystr.h"  
  4. #include < string> 
  5. #include < windows.h> 
  6. #include < atlstr.h> 
  7. using namespace std;  
  8. CString GetAppPath()  
  9. {//獲取應(yīng)用程序根目錄  
  10. TCHAR modulePath[MAX_PATH];  
  11. GetModuleFileName(NULL, modulePath, MAX_PATH);  
  12. CString strModulePath(modulePath);  
  13. strModulePathstrModulePath = strModulePath.Left
    (strModulePath.ReverseFind(_T('\\')));  
  14. return strModulePath;  
  15. }  
  16. bool CreateXmlFile(string& szFileName)  
  17. {//創(chuàng)建xml文件,szFilePath為文件保存的路徑,若創(chuàng)建成功返回true,否則false  
  18. try  
  19. {  
  20. //創(chuàng)建一個(gè)XML的文檔對(duì)象。  
  21. TiXmlDocument *myDocument = new TiXmlDocument();  
  22. //創(chuàng)建一個(gè)根元素并連接。  
  23. TiXmlElement *RootElement = new TiXmlElement("Persons");  
  24. myDocument->LinkEndChild(RootElement);  
  25. //創(chuàng)建一個(gè)Person元素并連接。  
  26. TiXmlElement *PersonElement = new TiXmlElement("Person");  
  27. RootElement->LinkEndChild(PersonElement);  
  28. //設(shè)置Person元素的屬性。  
  29. PersonElement->SetAttribute("ID", "1");  
  30. //創(chuàng)建name元素、age元素并連接。  
  31. TiXmlElement *NameElement = new TiXmlElement("name");  
  32. TiXmlElement *AgeElement = new TiXmlElement("age");  
  33. PersonElement->LinkEndChild(NameElement);  
  34. PersonElement->LinkEndChild(AgeElement);  
  35. //設(shè)置name元素和age元素的內(nèi)容并連接。  
  36. TiXmlText *NameContent = new TiXmlText("周星星");  
  37. TiXmlText *AgeContent = new TiXmlText("22");  
  38. NameElement->LinkEndChild(NameContent);  
  39. AgeElement->LinkEndChild(AgeContent);  
  40. CString appPath = GetAppPath();  
  41. string seperator = "\\";  
  42. string fullPath = appPath.GetBuffer(0) +seperator+szFileName;  
  43. myDocument->SaveFile(fullPath.c_str());//保存到文件  
  44. }  
  45. catch (string& e)  
  46. {  
  47. return false;  
  48. }  
  49. return true;  
  50. }  
  51. bool ReadXmlFile(string& szFileName)  
  52. {//讀取Xml文件,并遍歷  
  53. try  
  54. {  
  55. CString appPath = GetAppPath();  
  56. string seperator = "\\";  
  57. string fullPath = appPath.GetBuffer(0) +seperator+szFileName;  
  58. //創(chuàng)建一個(gè)XML的文檔對(duì)象。  
  59. TiXmlDocument *myDocument = new TiXmlDocument(fullPath.c_str());  
  60. myDocument->LoadFile();  
  61. //獲得根元素,即Persons。  
  62. TiXmlElement *RootElement = myDocument->RootElement();  
  63. //輸出根元素名稱,即輸出Persons。  
  64. cout < <  RootElement->Value() < <  endl;  
  65. //獲得第一個(gè)Person節(jié)點(diǎn)。  
  66. TiXmlElement *FirstPerson = RootElement->FirstChildElement();  
  67. //獲得第一個(gè)Person的name節(jié)點(diǎn)和age節(jié)點(diǎn)和ID屬性。  
  68. TiXmlElement *NameElement = FirstPerson->FirstChildElement();  
  69. TiXmlElement *AgeElement = NameElement->NextSiblingElement();  
  70. TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute();  
  71. //輸出第一個(gè)Person的name內(nèi)容,即周星星;age內(nèi)容,即;ID屬性,即。  
  72. cout < <  NameElement->FirstChild()->Value() < <  endl;  
  73. cout < <  AgeElement->FirstChild()->Value() < <  endl;  
  74. cout < <  IDAttribute->Value()< <  endl;  
  75. }  
  76. catch (string& e)  
  77. {  
  78. return false;  
  79. }  
  80. return true;  
  81. }  
  82. int main()  
  83. {  
  84. string fileName = "info.xml";  
  85. CreateXmlFile(fileName);  
  86. ReadXmlFile(fileName);  

C++ TinyXML解析器的相關(guān)使用方法就為大家介紹到這里。


當(dāng)前名稱:C++ TinyXML使用心得總結(jié)
鏈接URL:http://www.dlmjj.cn/article/dhsdpsd.html