C++使用TinyXml2解析Xml
阿新 • • 發佈:2018-12-30
1. TinyXml2
簡介
TinyXml
一直是一個非常好用的 Xml
解析工具 , 最新的開源版本 TinyXml2
相對於舊版本的 TinyXml
使用更少的記憶體 , 更快 , 並且使用更少的記憶體分配 , 現在是所有開發的重點 , 經過良好的測試 , 是您的最佳選擇 , 除非您有維護TinyXML-1程式碼的要求 ;
TinyXml2
使用類似的 API
到 TinyXml1
和相同的豐富的測試用例 , 但解析器的實現是完全重寫的 , 使其更適合在遊戲中使用 ;
TinyXml2
不需要 STL
, 但也降低了所有的 STL
支援 , 所有字串都是查詢並設定為 const char *
兩個解析器共同點 :
TinyXml2
的優點 :
- 所有未來開發的重點
- 更少的記憶體分配 (1/10到1/100) , 使用更少的記憶體 (大約TinyXml1的40%) , 並且更快
- 無STL要求
- 更現代的C++ , 包括一個正確的名稱空間
- 適當和有用的處理空白
TinyXML-1
的優點 :
- 支援一些
C++
STL
約定 : 流和字串 - 非常成熟和除錯良好的程式碼庫
2. 在 C++
中使用 TinyXml2
將解壓出來檔案裡面的
tinyxml2.h
和tinyxml2.cpp
檔案拷貝到工程目錄原始碼資料夾下 , 在專案中新增這兩個檔案在程式碼標頭檔案中引入標頭檔案和名稱空間
#include "tinyxml2.h" using namespace tinyxml2;
在程式碼中使用
TinyXml2
解析文件Xml
文件如下<?xml version="1.0"?> <Group> <User> <Name>John</Name> <Age>18</Age> </User> </Group>
程式碼中載入並解析改檔案
XMLDocument docXml; XMLError errXml = docXml.LoadFile("example.xml"); if (XML_SUCCESS == errXml) { XMLElement* elmtRoot = docXml.RootElement(); XMLElement *elmtUser = elmtRoot->FirstChildElement("User"); XMLElement *elmtName = elmtUser->FirstChildElement("Name"); if (elmtName) { const char* pContent= elmtName->GetText(); printf( "%s", pContent); } XMLElement *elmtAge = elmtName->NextSiblingElement(); if (elmtAge) { const char* pContent= elmtAge->GetText(); printf( "%s", pContent); } }
或者直接解析字串
XMLDocument docXml; char* pXml = "<Item>Hello World</Item>"; XMLError errXml = docXml.Parse(pXml); if (XML_SUCCESS == errXml) { XMLElement* elmtRoot = docXml.RootElement(); if (elmtRoot) { const char* pContent= elmtRoot->GetText(); printf( "%s", pContent); } }
注意 : 如果名稱空間衝突的話 , 可能會導致
XMLDocument
物件不明確 , 使用tinyxml2::XMLDocument
來使用
個人網站: Github , 歡迎點選給星