C++生成和解析XML文件的講解
概述
- 1.xml 指可擴(kuò)展標(biāo)記語言(EXtensible Markup Language)
- 2.xml 是一種標(biāo)記語言,類似html
- 3.xml 的設(shè)計(jì)宗旨是傳輸數(shù)據(jù),而非顯示數(shù)據(jù)
- 4.xml 標(biāo)簽沒有被預(yù)定義。需要自行定義標(biāo)簽
XML與HTML區(qū)別
- 1.xml 不是 html 的替代。
- 2.xml 和 html 為不同的目的而設(shè)計(jì):
- 3.xml 被設(shè)計(jì)為傳輸和存儲數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的內(nèi)容。
- 4.html 被設(shè)計(jì)用來顯示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀。
- 5.html 旨在顯示信息,而 xml 旨在傳輸信息。
第三方庫
XML第三方解析庫,選用TinyXML,TinyXML也是一個(gè)開源的解析XML解析庫,使用簡單正如其名,用于C++開發(fā),支持Windows和Linux。TinyXML通過DOM模型遍歷和分析XML。
官網(wǎng)地址:http://www.grinninglizard.com/tinyxml/
生成XML文件
TiXmlDocument xmlDocument; // 添加XML聲明 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é)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- 關(guān)于c++編譯protobuf時(shí)提示LNK2001 無法解析的外部符號的問題
- 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++類結(jié)構(gòu)體大小和構(gòu)造順序,析構(gòu)順序的測試,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08舉例剖析C++中引用的本質(zhì)及引用作函數(shù)參數(shù)的使用
這篇文章主要介紹了C++中引用的本質(zhì)及引用作函數(shù)參數(shù)的使用,講解了函數(shù)返回值是引用的情況等一些難點(diǎn),需要的朋友可以參考下2016-03-03Linux/C++多線程實(shí)例學(xué)習(xí)十字路口車輛調(diào)度
這篇文章主要為大家介紹了Linux/C++多線程實(shí)例學(xué)習(xí)十字路口車輛調(diào)度示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05