TinyXML產生xml檔案

來源:互聯網
上載者:User

聲明:歡迎任何人和組織轉載本blog中文章,但必須標記文章原始連結和作者資訊。

本文連結:http://blog.csdn.net/li_007/archive/2009/03/31/4038989.aspx

開拓進取的小烏龜------->CSDN點滴點點滴滴Blog

前面簡單介紹了TinyXML,順便寫了一個簡單的例子來測試利用TinyXML產生xml檔案,其實代碼實現很簡單。如下:

void WrittingXML(TiXmlString & xmlFile)<br />{<br />TiXmlDeclaration * xmlDec = new TiXmlDeclaration("1.0", "UTF-8", "yes");<br />TiXmlDocument * xmlDocs = new TiXmlDocument();<br />xmlDocs->LinkEndChild(xmlDec);<br />TiXmlElement * element = new TiXmlElement("Document");<br />xmlDocs->LinkEndChild(element);<br />TiXmlComment * comment = new TiXmlComment(" This is a list of new books ");<br />element->LinkEndChild(comment);<br />TiXmlElement * book = new TiXmlElement("Book");<br />book->SetAttribute("Name", "How to use TinyXML");<br />element->LinkEndChild(book);<br />TiXmlElement * author = new TiXmlElement("Author");<br />TiXmlText * Authortext = new TiXmlText("Leezhm");<br />author->LinkEndChild(Authortext);<br />book->LinkEndChild(author);<br />TiXmlElement * date = new TiXmlElement("Date");<br />TiXmlText * Datetext = new TiXmlText("2009-3-30");<br />date->LinkEndChild(Datetext);<br />book->LinkEndChild(date);<br />xmlDocs->SaveFile(xmlFile.c_str());<br />delete xmlDocs;<br />}

運行後利用IE 8.0開啟如下:

好了,看後就知道很簡單的,這也是我選擇它的一個原因,但這裡做很簡單的測試,沒有對xml進行驗證代碼實現,但是TinyXML自己帶的test Application中有對xml進行驗證的函數,大家有興趣可以去看。

代碼很簡單不囉嗦,說點別的,仔細看看代碼,其中使用了很多new來建立了對象指標,但是只看到一個delete,也許你會說著會引起記憶體流失,其實在上面的函數中,後面的delete也可以不要,並且還不會造成記憶體流失。原因看看TinyXML實現的源碼中TiXmlNode的解構函式的實現代碼如下:當然順便注意下所有的類的虛擬建構函式。

TiXmlNode::~TiXmlNode()<br />{<br />TiXmlNode* node = firstChild;<br />TiXmlNode* temp = 0;<br />while ( node )<br />{<br />temp = node;<br />node = node->next;<br />delete temp;<br />}<br />}

在結合一下前面文章介紹TinyXML的繼承圖表就清楚了為什麼這兒不需要我們手動釋放堆棧了,特別是不需要一個一個地釋放,只需要最後釋放最高節點就可以,比如TiXmlDocument節點。。。。。。在我實現的函數中其實也可以不需要delete xmlDocs這句的,因為他們都是局部變數,當變數的範圍結束的時候,會自動釋放。當然使用delete會觸發相應的class的解構函式的調用,這些都是C++的實現機制,在次不多說。

BTW:正是由於上面的原理,我們添加到TinyXML中的節點。。。都必須是動態用new來建立的。如果建立的不是指標,在記憶體釋放的時候會出現錯誤的,這個可以自己去測試。我想TinyXML這樣實現是因為TInyXML實現機制的要求,因為它是基於DOM,所有的節點都是在記憶體中。

&amp;lt;a href="http://www.vdoing.com" mce_href="http://www.vdoing.com" title="Vdoing StatsX No.54977"&amp;gt;&amp;lt;img src="http://simg.vdoing.com/m/54977/x01.gif?noscript" mce_src="http://simg.vdoing.com/m/54977/x01.gif?noscript" border="0"&amp;gt;&amp;lt;/a&amp;gt;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.