C++生成和解析XML文件的講解
概述
- 1.xml 指可擴(kuò)展標(biāo)記語言(EXtensible Markup Language)
- 2.xml 是一種標(biāo)記語言,類似html
- 3.xml 的設(shè)計宗旨是傳輸數(shù)據(jù),而非顯示數(shù)據(jù)
- 4.xml 標(biāo)簽沒有被預(yù)定義。需要自行定義標(biāo)簽
XML與HTML區(qū)別
- 1.xml 不是 html 的替代。
- 2.xml 和 html 為不同的目的而設(shè)計:
- 3.xml 被設(shè)計為傳輸和存儲數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的內(nèi)容。
- 4.html 被設(shè)計用來顯示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀。
- 5.html 旨在顯示信息,而 xml 旨在傳輸信息。
第三方庫
XML第三方解析庫,選用TinyXML,TinyXML也是一個開源的解析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í)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- 關(guān)于c++編譯protobuf時提示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í)現(xiàn)原理及實(shí)例解析
- c++中用TINYXML解析XML文件
- C++使用jsoncpp解析json的方法示例
- C++構(gòu)造和解析Json的使用示例
- c++ 解析yaml文件的步驟
相關(guān)文章
C語言之malloc動態(tài)分配內(nèi)存和free釋放
這篇文章主要介紹了C語言之malloc動態(tài)分配內(nèi)存和free釋放,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
C語言的可變參數(shù)函數(shù)實(shí)現(xiàn)詳解
某些情況下我們希望函數(shù)的參數(shù)個數(shù)可以根據(jù)需要確定,因此c語言引入可變參數(shù)函數(shù)。典型的可變參數(shù)函數(shù)的例子有printf()、scanf()等,下面我就開始講解2021-08-08
C語言壓縮文件和用MD5算法校驗(yàn)文件完整性的實(shí)例教程
這篇文章主要介紹了C語言壓縮文件和用MD5算法校驗(yàn)文件完整性的實(shí)例教程,這里演示了Windows下將文件壓縮為7z格式以及MD5檢驗(yàn)文件和密碼的方法,需要的朋友可以參考下2016-04-04
基于C語言實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)
這篇文章主要介紹了基于C語言實(shí)現(xiàn)學(xué)生成績管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
c++ chrono 獲取當(dāng)前時間的實(shí)現(xiàn)代碼
這篇文章主要介紹了c++ chrono 獲取當(dāng)前時間的實(shí)現(xiàn)代碼,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07
C語言實(shí)現(xiàn)動態(tài)版通訊錄的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)一個簡單的動態(tài)版通訊錄,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下2022-08-08

