C++生成和解析XML文件的講解
概述
- 1.xml 指可擴(kuò)展標(biāo)記語(yǔ)言(EXtensible Markup Language)
- 2.xml 是一種標(biāo)記語(yǔ)言,類似html
- 3.xml 的設(shè)計(jì)宗旨是傳輸數(shù)據(jù),而非顯示數(shù)據(jù)
- 4.xml 標(biāo)簽沒(méi)有被預(yù)定義。需要自行定義標(biāo)簽
XML與HTML區(qū)別
- 1.xml 不是 html 的替代。
- 2.xml 和 html 為不同的目的而設(shè)計(jì):
- 3.xml 被設(shè)計(jì)為傳輸和存儲(chǔ)數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的內(nèi)容。
- 4.html 被設(shè)計(jì)用來(lái)顯示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀。
- 5.html 旨在顯示信息,而 xml 旨在傳輸信息。
第三方庫(kù)
XML第三方解析庫(kù),選用TinyXML,TinyXML也是一個(gè)開(kāi)源的解析XML解析庫(kù),使用簡(jiǎn)單正如其名,用于C++開(kāi)發(fā),支持Windows和Linux。TinyXML通過(guò)DOM模型遍歷和分析XML。
官網(wǎng)地址:http://www.grinninglizard.com/tinyxml/
生成XML文件
TiXmlDocument xmlDocument; // 添加X(jué)ML聲明 xmlDocument.LinkEndChild(new TiXmlDeclaration( "1.0", "GBK", "" )); // 添加根元素 TiXmlElement * xmlRoot = new TiXmlElement("root"); xmlDocument.LinkEndChild(xmlRoot); //根元素下添加子元素1 TiXmlElement* xmlChild1 = new TiXmlElement("name"); xmlRoot->LinkEndChild(xmlChild1); xmlChild1->LinkEndChild(new TiXmlText("woniu")); xmlChild1->SetAttribute("id", "0001");//設(shè)置屬性 //根元素下添加子元素2 TiXmlElement* xmlChild2 = new TiXmlElement("Student"); xmlRoot->LinkEndChild(xmlChild2); TiXmlElement* xmlChild2_01 = new TiXmlElement("name"); xmlChild2->LinkEndChild(xmlChild2_01); xmlChild2_01->LinkEndChild(new TiXmlText("woniu201")); TiXmlElement* xmlChild2_02 = new TiXmlElement("classes"); xmlChild2->LinkEndChild(xmlChild2_02); xmlChild2_02->LinkEndChild(new TiXmlText("86")); //保存xml文件 xmlDocument.SaveFile("woniu.xml");
生成XML如下:
解析XML文件
TiXmlDocument xmlDocument; if (!xmlDocument.LoadFile("woniu.xml")) { return -1; } //根節(jié)點(diǎn) TiXmlElement* xmlRoot = xmlDocument.RootElement(); if (xmlRoot == NULL) { return -1; } //獲取子節(jié)點(diǎn)信息1 TiXmlElement* xmlNode1Name = xmlRoot->FirstChildElement("name"); const char* node1Name = xmlNode1Name->GetText(); const char* node1AttId = xmlNode1Name->Attribute("id"); //獲取子節(jié)點(diǎn)信息2 TiXmlElement* xmlNode2Stu = xmlRoot->FirstChildElement("Student"); TiXmlElement* xmlNode2_name = xmlNode2Stu->FirstChildElement("name"); TiXmlElement* xmlname2_classes = xmlNode2Stu->FirstChildElement("classes"); const char* node2Name = xmlNode2_name->GetText(); const char* node2Classes = xmlname2_classes->GetText();
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- 關(guān)于c++編譯protobuf時(shí)提示LNK2001 無(wú)法解析的外部符號(hào)的問(wèn)題
- C++求最大公約數(shù)四種方法解析
- C++ opencv ffmpeg圖片序列化實(shí)現(xiàn)代碼解析
- Python調(diào)用C/C++的方法解析
- C++實(shí)現(xiàn)學(xué)生管理系統(tǒng)示例解析
- C++ xxx_cast實(shí)現(xiàn)轉(zhuǎn)換代碼實(shí)例解析
- C++寫時(shí)拷貝實(shí)現(xiàn)原理及實(shí)例解析
- c++中用TINYXML解析XML文件
- C++使用jsoncpp解析json的方法示例
- C++構(gòu)造和解析Json的使用示例
- c++ 解析yaml文件的步驟
相關(guān)文章
C++關(guān)于類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測(cè)試詳解
這篇文章主要介紹了C++類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測(cè)試,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08C語(yǔ)言小游戲之小熊跳板功能的實(shí)現(xiàn)
這篇文章主要介紹了C語(yǔ)言小游戲之小熊跳板功能的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12舉例剖析C++中引用的本質(zhì)及引用作函數(shù)參數(shù)的使用
這篇文章主要介紹了C++中引用的本質(zhì)及引用作函數(shù)參數(shù)的使用,講解了函數(shù)返回值是引用的情況等一些難點(diǎn),需要的朋友可以參考下2016-03-03C語(yǔ)言例題之輸出1000以內(nèi)的所有完數(shù)
完數(shù)是一些特殊的自然數(shù),它所有的真因子(即除了自身以外的約數(shù))的和(即因子函數(shù)),恰好等于它本身,如果一個(gè)數(shù)恰好等于它的因子之和,則稱該數(shù)為“完數(shù)”,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言例題之輸出1000以內(nèi)的所有完數(shù)的相關(guān)資料,需要的朋友可以參考下2022-11-11Linux/C++多線程實(shí)例學(xué)習(xí)十字路口車輛調(diào)度
這篇文章主要為大家介紹了Linux/C++多線程實(shí)例學(xué)習(xí)十字路口車輛調(diào)度示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05c語(yǔ)言輕松實(shí)現(xiàn)猜數(shù)字小游戲
猜數(shù)字是興起于英國(guó)的益智類小游戲,起源于20世紀(jì)中期,一般由兩個(gè)人或多人玩,也可以由一個(gè)人和電腦玩。游戲規(guī)則為一方出數(shù)字,一方猜,今天我們來(lái)用C實(shí)現(xiàn)這個(gè)游戲案例2022-04-04