TiXml使用詳解

2021-06-22 10:59:17 字數 3226 閱讀 2991

本文用乙個詳細的例子說明了tixml的使用方法。如寫、查詢、插入、替換、載入、遍歷等常見操作。

首先簡單介紹一下tinyxml,要看詳細的在網上搜搜了^_^:

tinyxml是乙個簡單小巧,可以很容易整合到其它程式中的c++ xml解析器。簡單地說,tinyxml解析乙個xml文件並由此生成乙個可讀可修改可儲存的文件物件模型(dom)。tinyxml使用文件物件模型(dom),這意味著xml資料被解析成乙個可被瀏覽和操作的c++物件,然後它可以被寫到磁碟或者另乙個輸出流中。你也可以把c++物件構造成乙個xml文件然後把它寫到磁碟或者另乙個輸出流中。

1、tinyxml源**只有4個cpp檔案和2個頭檔案。

2、首先要理解tinyxml中的各個基本型別之間的關係,看看這個繼承圖大家就會很明白了!

可以看到tinyxml中的注釋comment ,宣告declaration,元素element,文字等都是節點node的子類,也就是說可以把xml檔案中的各個元素當做節點來處理。node型別也有到各個子類之間的轉換方法,如toelement()轉換成元素,todocument轉換成文件等。

因此可以吧tixmlnode作為tinyxml的基本資料型別來操作,這樣轉化到其他型別也比較方便!

3、類之間的關係

tinyxml實現的是dom訪問模型,因此提供了一系列的類對應xml檔案中的各個節點。主要類間的關係如下:

tixmlbase:其他類的基類,是個抽象類

tixmlnode:表示乙個節點,包含節點的一般方法,如訪問子節點、兄弟節點、編輯自身、編輯子節點

tixmldocument:表示整個xml文件,不對應其中某個特定的節點。

tixmlelement:表示元素節點,可以包含子節點和tixmlattribute

tixmlcomment:表示注釋

tixmldeclaration:表示宣告

tixmltext:表示文字節點

tixmlunknown:表示未知節點,通常是出錯了

tixmlattribute:表示乙個元素的屬性

下面是乙個簡單的例子:

<?xml version="1.0" encoding="utf-8" ?>

tinyxml how to

20some words…

整個文件,對應tixmldocument

book,name,price, description,都對應tixmlelement

第一行對應乙個tixmldeclaration

第二行對應乙個tixmlcomment

「tinyxml how to」對應乙個tixmltext

unit則是price的乙個tixmlattribute

這些類與xml檔案中的相應元素都有很好的對應關係,因此相信參照tinyxml的文件,可以很容易的掌握各個方法的使用。

2.  需要注意的問題

各類之間的轉換

由於各個節點類都從tixmlnode繼承,在使用時常常需要將tixmlnode*型別的指標轉換為其派生類的指標,在進行這種轉換時,應該首先使用由tixmlnode類提供的一系列轉換函式,如toelement(void),而不是c++的dynamic_cast。

檢查返回值

由於tinyxml是乙個非校驗的解析器,因此當解析乙個檔案時,很可能檔案並不包含我們預期的某個節點,在這種情況下,tinyxml將返回空指標。因此,必須要對返回值進行檢查,否則將很容易出現記憶體訪問的錯誤。

如何重頭建立乙個xml檔案

先建立乙個tixmldocument物件,然後,載入某個模板,或者直接插入乙個節點作為根節點,接著就可以像開啟乙個已有的xml檔案那樣對它進行操作了。

4、要理解tinyxml中的每個節點都可能是另乙個節點的父節點這個很重要,因此遍歷tinyxml文件要用遞迴的方法。每個節點都可能有屬性,文字什麼的!

5、每個type of tixmlnode節點的值'value'對應如下 :

document: filename of the xml file

element: name of the element

comment: the comment text

unknown: the tag contents

text: the text string

6、tinyxml中node的型別types是乙個列舉型別,其成員如下:

document, element, comment, unknown, text, and declaration

8、常用操作詳解:

#include "tinyxml.h"

#include

using namespace std;

tixmldocument *pdoc =null;

void write_xml( )

void dump_to_stdout( tixmlnode* pparent )//tixml主頁上給的乙個遍歷方法(遞迴呼叫)

break;

case tixmlnode::comment:

printf( "comment: [%s]", pparent->value());

break;

case tixmlnode::unknown:

printf( "unknown" );

break;

case tixmlnode::text:

ptext = pparent->totext();

printf( "text: [%s]", ptext->value() );

break;

case tixmlnode::declaration:

printf( "declaration" );

break;

default:

break;

}printf( "/n" );

for ( pchild = pparent->firstchild(); pchild != 0; pchild = pchild->nextsibling())

}void search(tixmlnode* pparent)//遍歷時候,把每個節點都是做乙個父節點,即假定其都有子節點childnode

printf( "/n" );

for ( pchild = pparent->firstchild(); pchild != 0; pchild = pchild->nextsibling())

}int main(int argc, char* argv)

else

return 0;

}9、引例

TiXml使用詳解

tixml使用詳解 本文用乙個詳細的例子說明了tixml的使用方法。如寫 查詢 插入 替換 載入 遍歷等常見操作。首先簡單介紹一下tinyxml,要看詳細的在網上搜搜了 tinyxml是乙個簡單小巧,可以很容易整合到其它程式中的c xml解析器。簡單地說,tinyxml解析乙個xml文件並由此生成乙...

TiXml使用詳解 例子

在tinyxml中,根據xml的各種元素來定義了一些類 tixmlbase 整個tinyxml模型的基類。tixmlattribute 對應於xml中的元素的屬性。tixmlnode 對應於dom結構中的節點。tixmlcomment 對應於xml中的注釋。tixmldeclaration 對應於x...

TiXml使用介紹

tixml使用詳解 本文用乙個詳細的例子說明了tixml的使用方法。如寫 查詢 插入 替換 載入 遍歷等常見操作。tinyxml是乙個簡單小巧,可以很容易整合到其它程式中的c xml解析器。簡單地說,tinyxml解析乙個xml文件並由此生成乙個可讀可修改可儲存的文件物件模型 dom tinyxml...