C++庫(TinyXML)

來源:互聯網
上載者:User

標籤:file   下載   out   擴充   類庫   sim   等等   設定檔   XML   

C++庫(TinyXML)

什麼是XML?

  “當 XML(擴充標記語言)於 1998 年 2 月被引入軟體工業界時,它給整個行業帶來了一場風暴。有史以來第一次,這個世界擁有了一種用來結構化文檔和資料的通用且適應性強的格式,它不僅僅可以用於 WEB,而且可以被用於任何地方。”

  XML 指擴充標記語言,是一種資訊交換的標準。

<!-- a xml simple example--><Persons>        <Person ID="1">            <name>Kobe</name>            <age>24</age>        </Person>        <Person ID="2">            <name>Michael</name>            <age>23</age>       </Person> </Persons>
什麼是TinyXML?

  當前,對xml的使用非常廣泛,讀取和設定xml設定檔是我們最常用的操作。常見C/C++ XML解析器有Tinyxml、XERCES、squashxml、xmlite、pugxml、libxml等等,這些解析器有些是支援多語言的,有些只是單純C/C++的。

  TinyXML是目前非常流行的一款基於DOM模型的XML解析器,簡單易用且小巧玲瓏,非常適合儲存簡單資料,設定檔,對象序列化等資料量不是很大的操作。這個解析庫的模型通過解析XML檔案,然後在記憶體中產生DOM模型,從而讓我們很方便的遍曆這棵XML樹。

下載安裝TinyXML

  下載:https://sourceforge.net/projects/tinyxml/

      安裝:解壓縮tinyXML後,將這六個檔案添加到你的C++工程中,分別是tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp。在需要操作xml檔案的地方,使用如下代碼,就可以引入TinyXML類庫。

#include<tinyxml>   或 #include "tinyxml.h"
TinyXML類結構 

  TiXmlBase:整個TinyXML模型的基類。

  TiXmlAttribute:對應於XML中的元素的屬性。

  TiXmlNode:對應於DOM結構中的節點。

  TiXmlComment:對應於XML中的注釋

  TiXmlDeclaration:對應於XML中的申明部分,即<?versiong="1.0" ?>。

  TiXmlDocument:對應於XML的整個文檔。

  TiXmlElement:對應於XML的元素。

  TiXmlText:對應於XML的文字部分

  TiXmlUnknown:對應於XML的未知部分。

  TiXmlHandler:定義了針對XML的一些操作。

 

一個XML讀寫例子
 1 #include <iostream> 2 #include "tinyxml.h" 3 #include "tinystr.h" 4 #include <string> 5 #include <windows.h> 6 #include <atlstr.h> 7  8 using namespace std; 9 10 CString GetAppPath()11 {12     TCHAR modulePath[MAX_PATH];13     GetModuleFileName(NULL, modulePath, MAX_PATH);14     CString strModulePath(modulePath);15     strModulePath = strModulePath.Left(strModulePath.ReverseFind(_T(‘\\‘)));16     return strModulePath;17 }18 19 bool CreateXmlFile(string& szFileName)20 {21     try22     {23         TiXmlDocument *myDocument = new TiXmlDocument();24         TiXmlElement *RootElement = new TiXmlElement("Persons");25         myDocument->LinkEndChild(RootElement);26         TiXmlElement *PersonElement = new TiXmlElement("Person");27         RootElement->LinkEndChild(PersonElement);28         PersonElement->SetAttribute("ID", "1");29         TiXmlElement *NameElement = new TiXmlElement("name");30         TiXmlElement *AgeElement = new TiXmlElement("age");31         PersonElement->LinkEndChild(NameElement);32         PersonElement->LinkEndChild(AgeElement);33         TiXmlText *NameContent = new TiXmlText("Michael");34         TiXmlText *AgeContent = new TiXmlText("23");35         NameElement->LinkEndChild(NameContent);36         AgeElement->LinkEndChild(AgeContent);37         CString appPath = GetAppPath();38         string seperator = "\\";39         string fullPath = appPath.GetBuffer(0) +seperator+szFileName;40         myDocument->SaveFile(fullPath.c_str());41     }42     catch (string& e)43     {44         return false;45     }46     return true;47 }48 49 bool ReadXmlFile(string& szFileName)50 {51     try52     {53         CString appPath = GetAppPath();54         string seperator = "\\";55         string fullPath = appPath.GetBuffer(0) +seperator+szFileName;56         TiXmlDocument *myDocument = new TiXmlDocument(fullPath.c_str());57         myDocument->LoadFile();58         TiXmlElement *RootElement = myDocument->RootElement();59         cout << RootElement->Value() << endl;60         TiXmlElement *FirstPerson = RootElement->FirstChildElement();61         TiXmlElement *NameElement = FirstPerson->FirstChildElement();62         TiXmlElement *AgeElement = NameElement->NextSiblingElement();63         TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute();64         cout << NameElement->FirstChild()->Value() << endl;65         cout << AgeElement->FirstChild()->Value() << endl;66         cout << IDAttribute->Value()<< endl;67     }68     catch (string& e)69     {70         return false;71     }72     return true;73 }74 75 int main(void)76 {77     string fileName = "info.xml";78     CreateXmlFile(fileName);79     ReadXmlFile(fileName);80 }

 

C++庫(TinyXML)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.