日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tinyxml使用指导

發布時間:2025/4/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tinyxml使用指导 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TinyXML是一個簡單小巧,可以很容易集成到其它程序中的C++ XML解析器。

它能做些什么

簡單地說,TinyXML解析一個XML文檔并由此生成一個可讀可修改可保存的文檔對象模型(DOM)。

XML的意思是“可擴展標記語言“(eXtensible Markup Language)。它允許你創建你自己的文檔標記。在為瀏覽器標記文檔方面HTML做得很好,然而XML允許你定義任何文檔標記,比如可以為一個組織者應用程序定義一個描述“to do”列表的文檔。 XML擁有一個結構化并且方便的格式,所有為存儲應用程序數據而創建的隨機文件格式都可以用XML代替,而這一切只需要一個解析器。

最全面正確的說明可以在http://www.w3.org/TR/2004/REC-xml-20040204/找到,但坦白地說,它很晦澀難懂。事實上我喜歡http://skew.org/xml/tutorial上關于XML的介紹。

有不同的方法可以訪問和與XML數據進行交互。TinyXML使用文檔對象模型(DOM),這意味著XML數據被解析成一個可被瀏覽和操作的C++對象,然后它可以被寫到磁盤或者另一個輸出流中。你也可以把C++對象構造成一個XML文檔然后把它寫到磁盤或者另一個輸出流中。

TinyXML被設計得容易快速上手。它只有兩個頭文件和四個cpp文件。只需要把它們簡單地加到你的項目中就行了。有一個例子文件——xmltest.cpp來引導你該怎么做。

TinyXML以Zlib許可來發布,所以你可以在開源或者商業軟件中使用它。許可證更具體的描述在每個源代碼文件的頂部可以找到。

TinyXML在保證正確和恰當的XML輸出的基礎上嘗試成為一個靈活的解析器。TinyXML可以在任何合理的C++適用系統上編譯。它不依賴于異常或者運行時類型信息,有沒有STL支持都可以編譯。TinyXML完全支持UTF-8編碼和前64k個字符實體(<i>譯注:如果你不明白這句譯文,可能你需要了解一下Unicode編碼</i>)。

它無法做些什么

TinyXML不解析不使用DTDs(文檔類型定義)或者XSLs(可擴展樣式表語言)。有其它解析器(到www.sourceforge.org搜索一下XML)具有更加全面的特性,但它們也就更大,需要花更長的時間來建立你的項目,有更陡的學習曲線,而且經常有一個更嚴格的許可協議。如果你是用于瀏覽器或者有更復雜的XML需要,那么TinyXML不適合你。

下面的DTD語法在TinyXML里是不做解析的:

<!DOCTYPE Archiv [
<!ELEMENT Comment (#PCDATA)>
]>

因為TinyXML把它看成是一個帶著非法嵌入!ELEMENT結點的!DOCTYPE結點。或許這在將來會得到支持。

指南

有耐性些,這是一份能很好地指導你怎么開始的指南,它(非常短小精悍)值得你花時間完整地讀上一遍。

?

元素類

元素為一個容器類,它具有元素名稱,并可以包含其它元素,文本,注釋和未知節點,這些對象統稱為元素的節點,即節點可以為元素、文本、注釋和未知節點類型。元素也可以包含任意個數的屬性。

我們還是以如下的XML代碼來說明這個類的功能。

<element?attribute="this a attribute(這是一個屬性)"?int=?"1"?float?=?"3.14">

?????<subelement1>

?????????This a text(這是一個文本)

?????</subelement1>

?????<subelement2/>

?????<subelement3/>

?????<subelement4/>????

</element>

?

節點名

在上方元素的代碼中,element為根元素的名稱,你可以通過如下的函數來設置和返回它。

+const?std::string&?ValueStr()?const

+void?SetValue(?const?std::string& _value )

?

父節點

subelement1,subelement2,subelement3,subelement4都是element的子元素,如果當前元素對象的指針指向subelement1,subelement2,subelement3,subelement4,你可以通過Parent()函數來返回指向element對象的指針,Parent()函數的聲明如下:

+TiXmlNode*?Parent()

?

子節點

通過父節點的指針,你可以遍歷所有的子節點。

+TiXmlNode*?FirstChild()

+TiXmlNode*?FirstChild(?const?std::string& _value )

上面兩個函數用于返回第一個子節點對象的指針,帶參數名的那個函數表示返回第一個名為_value的子節點。

?

+TiXmlNode*?LastChild()

+TiXmlNode*?LastChild(?const?std::string& _value )

上面的兩個函數用于返回最后一個節點對象的指針,帶參數名的那個函數表示返回最后一個名為_value的子節點。

?

你也可以使用IterateChildren()函數來依次遍歷所有的節點,它們的函數聲明如下:

+TiXmlNode*?IterateChildren(?const?TiXmlNode* previous )

+TiXmlNode*?IterateChildren(?const?std::string& _value,?const?TiXmlNode* previous )

帶參數名的那個函數表示只遍歷同名的節點。

?

編輯子節點

你可以插入、刪除替換所有的子節點。

+TiXmlNode*?InsertEndChild(?const?TiXmlNode& addThis );

+TiXmlNode*?InsertBeforeChild( TiXmlNode* beforeThis,?const?TiXmlNode& addThis );

+TiXmlNode*?InsertAfterChild(??TiXmlNode* afterThis,?const?TiXmlNode& addThis );

上面三個函數用于插入節點,InsertEndChild函數讓你把新節點插入到末尾,InsertBeforeChildInsertAfterChild函數允許你在指定的節點位置前后插入節點。

?

+TiXmlNode*?ReplaceChild( TiXmlNode* replaceThis,?const?TiXmlNode& withThis );

ReplaceChild函數用于替換指定的節點。

?

+bool?RemoveChild( TiXmlNode* removeThis );

RemoveChild函數讓你刪除指定的節點。

void?Clear();

Clear函數會刪除本節點的所有子節點(包括子節點包含的從子節點),但不會修改本節點。

?

同級節點

<element?attribute="this a attribute(這是一個屬性)"?int=?"1"?float?=?"3.14">

?????<subelement1>

?????????This a text(這是一個文本)

?????</subelement1>

?????<subelement2/>

?????<subelement3/>

?????<subelement4/>????

</element>

在上面的xml代碼中,subelement1、subelement2、subelement3、subelement4都屬于同級節點,我們也提供了相關的函數用于在這些同級節點中遍歷。

?

+TiXmlNode*?PreviousSibling()

+TiXmlNode*?PreviousSibling(?const?std::string& _value )

可以根據當前的節點,返回上一個節點的指針。帶參數名的那個函數表示返回上一個名為_value的節點。

?

當然你也可以根據當前的節點,返回下一個節點的指針。帶參數名的那個函數表示返回下一個名為_value的節點。

+TiXmlNode*?NextSibling()

+TiXmlNode*?NextSibling(?const?std::string& _value)

?

遍歷元素

元素是一種特殊的節點,以’<’為開始字符,后接元素名稱。函數NextSiblingElement用于返回下一個同級元素,而忽略其它類型的節點。它們的函數聲明如下:

+TiXmlElement*?NextSiblingElement()

+TiXmlElement*?NextSiblingElement(?const?std::string& _value)

帶參數名的那個函數表示返回下一個名為_value的同級元素。

?

本類也提供了相關的函數,讓你返回第一個子元素。

+TiXmlElement*?FirstChildElement()

+TiXmlElement*?FirstChildElement(?const?std::string& _value )

帶參數名的那個函數表示返回下一個名為_value的子元素。

?

元素屬性

屬性一般保存在元素中,它們為使用“=”號連接的兩個字符串,左邊的表示屬性名,等號右邊的表示屬性值,通常使用字符串、整數和浮點數等數據類型表示。例如,pi = 3.14。

你可以通過如下的函數,返回屬性值。

+const?std::string*?Attribute(?const?std::string& name )?const;

+const?std::string*?Attribute(?const?std::string& name,?int* i )?const;

+const?std::string*?Attribute(?const?std::string& name,?double* d )?const;

在上面3個函數中,第一個函數使用字符串保存返回的屬性值,第二個函數把屬性值轉換為整數然后返回,第三個函數把屬性值轉換為浮點數然后返回。不過,第二、三個函數都會以字符串的形式記錄屬性值,并作為函數的返回值返回。

另外,你也可以使用模板函數:

+template<?typename?T >?int?QueryValueAttribute(?const?std::string& name, T* outValue )?const

來返回特點的屬性值,它會根據你傳入的參數,自動選擇合適數據類型。

?

另外,本類也提供了如下三個函數讓你設置屬性,參數的類型和返回函數類似。

+void?SetAttribute(?const?std::string& name,?const?std::string& _value );

+void?SetAttribute(?const?std::string& name,?int?_value );

+void?SetDoubleAttribute(?const?char?* name,?double?value );

?

FirstAttributeLastAttribute可以讓你返回第一個和最后一個屬性,它們的函數聲明如下:

+TiXmlAttribute*?FirstAttribute()

+TiXmlAttribute*?LastAttribute()??

RemoveAttribute函數可以讓你刪除指定名稱的屬性,它的函數聲明如下:

+void?RemoveAttribute(?const?std::string& name )

?

元素函數總結

ValueStr????????????????//返回元素名稱

SetValue????????????????//設置元素名稱

Parent??????????????//返回父節點對象

?

FirstChild??????????//返回第一個子節點

LastChild???????????????//返回最后一個子節點

IterateChildren?????//返回下一個子節點

?

InsertEndChild??????//在最后一個子節點后插入子節點

InsertBeforeChild???????//在指定的子節點前插入子節點

InsertAfterChild????????//在指定的子節點后插入子節點

ReplaceChild????????????//替換指定的子節點

RemoveChild?????????//刪除指定的子節點

Clear???????????????//刪除所有的子節點

?

PreviousSibling?????//返回同級中前一個節點

NextSibling?????????//返回同級中后一個節點

?

NextSiblingElement??????//返回同級中后一個元素

FirstChildElement???????//返回第一個子元素節點

Attribute???????????????//返回元素中的屬性值

QueryValueAttribute?//返回元素中的屬性值

SetAttribute????????????//設置元素中的屬性值

FirstAttribute??????//返回元素中第一個屬性對象

LastAttribute???????????//返回元素中最后一個屬性對象

RemoveAttribute?????//刪除元素中指定的屬性對象

?

屬性類

屬性為名稱="值"對,元素可以具有屬性值,但名稱必須唯一。

你可以通過

+const?std::string&?NameTStr()?const

返回屬性名稱

?

也可以通過下面三個函數返回屬性值:

+const?std::string&?ValueStr()?const

+int???????????????IntValue()?const;

+double????????????DoubleValue()?const;

?

當然你也可以設置屬性值,它們的函數聲明如下:

+void?SetName(?const?std::string& _name )

+void?SetIntValue(?int?_value );??

+void?SetDoubleValue(?double?_value );

+void?SetValue(?const?std::string& _value )

以上函數與元素類中的相關函數類似,這里不重復介紹了。

?

在元素屬性中,通常具有許多屬性,你可以通過Next函數返回下一個屬性對象的指針,也可以通過Previous函數獲得上一個屬性對象的指針。它們的函數聲明如下:

+TiXmlAttribute*?Next()

+TiXmlAttribute*?Previous()

轉載于:https://www.cnblogs.com/lgh1992314/archive/2013/03/30/5835151.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的tinyxml使用指导的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。