1. TinyXml2
簡介
TinyXml2
TinyXml
一直是一個非常好用的
Xml
解析工具 , 最新的開源版本
TinyXml2
相對于舊版本的
TinyXml
使用更少的記憶體 , 更快 , 并且使用更少的記憶體配置設定 , 現在是所有開發的重點 , 經過良好的測試 , 是您的最佳選擇 , 除非您有維護TinyXML-1代碼的要求 ;
TinyXml2
使用類似的
API
到
TinyXml1
和相同的豐富的測試用例 , 但解析器的實作是完全重寫的 , 使其更适合在遊戲中使用 ;
TinyXml2
不需要
STL
, 但也降低了所有的
STL
支援 , 所有字元串都是查詢并設定為
const char *
, 這允許使用内部配置設定器 , 并保持代碼更簡單 ;
兩個解析器共同點 :
- 使用類似的API很簡單
- 基于DOM的解析器
- UTF-8 Unicode支援 http://en.wikipedia.org/wiki/UTF-8
TinyXml2
的優點 :
- 所有未來開發的重點
- 更少的記憶體配置設定 (1/10到1/100) , 使用更少的記憶體 (大約TinyXml1的40%) , 并且更快
- 無STL要求
- 更現代的C++ , 包括一個正确的命名空間
- 适當和有用的處理空白
TinyXML-1
的優點 :
- 支援一些
C++
約定 : 流和字元串STL
- 非常成熟和調試良好的代碼庫
2. 在 C++
中使用 TinyXml2
C++
TinyXml2
- 在
中使用C++
, 首先去TinyXml2
官網下載下傳源碼 https://github.com/leethomason/tinyxml2 , 下載下傳Github
檔案後 , 解壓出來zip
- 将解壓出來檔案裡面的
和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 , 歡迎點選給星