TinyXml高速入門(一)

2021-09-06 19:00:02 字數 1621 閱讀 4483

對於xml檔案,眼下我的工作僅僅是集中在配置檔案和作為簡單的資訊檔案來用,因此我不太喜歡使用msxml這樣的重量級的xml解析器,特別是使用msxml解析xml涉及到複雜的com型別轉換,更是令人感覺繁瑣。因此對於簡單的xml檔案的解析,我更願意使用開源的tinyxml。

首先介紹一下tinyxml吧。tinyxml是眼下很流行的一款基於dom模型的xml解析器,簡單易用且小巧玲瓏,很適合儲存簡單資料,配置檔案,物件序列化等資料量不是很大的操作,其主頁是: ,眼下最新版本號是2.5.3 版本號。

tinyxml網上的教程非常多,可是我認為寫得都不如何(感覺就是看完之後就沒學會)。沒辦法,僅僅得自己整理一篇適合自己的,至於適不適合別人,就見仁見智了。我感覺xml檔案本質就是小型的資料庫,換個角度來說就是,你對資料庫有什麼操作你對xml檔案就應能實現什麼操作。一般而言,對資料庫的操作包含下面幾種:新建資料庫、查詢資料庫、改動資料庫和刪除資料庫。那麼相應xml檔案就是新建xml檔案、查詢xml檔案的指定節點的值,改動xml檔案裡節點的值和刪除xml檔案裡節點的值。

首先我們認識一下xml檔案有哪幾種形式。以下我列出一些經常使用的xml檔案的形式:

example1.xml: <?xml version="1.0" ?> world example2.xml: <?xml version="1.0" ?> alas great world alas (again)

鑑於example4.xml比較複雜,以下我將以此為例介紹tinyxml的使用。

tinyxml使用了兩種編譯選擇:使用標準c的char *型別或者使用stl中的std::string,當中使用預處理器tixml_use_stl進行控制,即加入了tixml_use_stl為使用std::string的。鑑於stl的廣泛使用以及其強大功能,以下我以使用std::string的tinyxml說明。

首先使用vs 2005開啟tinyxmlstl.dsp的project檔案,將其編譯成乙個靜態庫,debug版本號為:tinyxmld_stl.lib,然後開始測試tinyxml庫。我的測試計畫是這種:首先使用tinyxml庫建立example4.xml,然後將其讀出來,然後查詢指定節點的屬性或文字,再改動example4.xml(改動當中的一些節點值和刪除當中乙個節點,新增乙個節點),然後再讀出來以推斷是否改動成功。詳細是在vs 2005上新建乙個控制台project:test,注意使用多位元組字符集進行編譯,同一時候加入。首先是建立xml檔案的**:

上面是建立xml檔案的**,以下介紹讀取xml檔案的**。列印整個xml檔案的**非常easy,**例如以下:

/*! * /brief 列印xml檔案。 * * /param xmlfile xml檔案全路徑。 * /return 是否成功。true為成功,false表示失敗。 */ bool paintxml(std::string xmlfile) pdoc->loadfile(xmlfile); pdoc->print(); return true; }

下次介紹使用tinyxml庫對xml檔案進行查詢指定節點、刪除指定節點、改動指定節點和新增節點的使用方法。

參考文獻:

1.《tinyxml新手教程 》

2. 《tinyxml 使用筆記與總結 》

3. 《tinyxml tutorial 中文指南 》

TinyXml高速入門(一)

對於xml檔案,眼下我的工作僅僅是集中在配置檔案和作為簡單的資訊檔案來用,因此我不太喜歡使用msxml這樣的重量級的xml解析器,特別是使用msxml解析xml涉及到複雜的com型別轉換,更是令人感覺繁瑣。因此對於簡單的xml檔案的解析,我更願意使用開源的tinyxml。首先介紹一下tinyxml吧...

TinyXml高速入門(一)

對於xml檔案,眼下我的工作僅僅是集中在配置檔案和作為簡單的資訊檔案來用,因此我不太喜歡使用msxml這樣的重量級的xml解析器,特別是使用msxml解析xml涉及到複雜的com型別轉換,更是令人感覺繁瑣。因此對於簡單的xml檔案的解析,我更願意使用開源的tinyxml。首先介紹一下tinyxml吧...

TinyXml基本入門(一)

參考 參考 近期在學習xml,偶然得知tinyxml這個東西,想盡快上手。2 tinyxml.h tinystr.h tinystr.cpp tinyxml.cpp tinyxmlparser.cpp tinyxmlerror.cpp 包含到當前工程中。3 新建createxml.cpp.cpp檔案...