亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

怎么利用tinyxml操縱xml和應該注意的問題有哪些

2020-02-24 14:38:02
字體:
來源:轉載
供稿:網友

今天小編跟大家分享一下怎么利用tinyxml.html" target="_blank">xml操縱xml和應該注意的問題有哪些,感興趣的朋友跟小編一起來了解一下吧!

在上篇博客中,大概了解了tinyxml工具的架構,那這篇博客,我們詳細講述如何利用tinyxml操縱xml。以及在操作的過程中,我們應該注意的問題。
首先把tinyxml源文件導入自己的工程中,效果如下:?
????

? ? 實際上,直接添加文件到工程中:如下:
?


若您的系統是win7或office是2007以上的,添加文件這個功能是不能用的,結果是:或直接崩潰?;驔]反應。解決方案如下:?
http://www.49028c.com/article/32996.htm
環境準備好了,那么我們開始動手操作吧。正如對數據庫表操作一樣---增刪改查。根據此邏輯,那就從增(創建)開始。
創建的格式如下:

?

?




lhy
22

?


上篇博客中,我們也介紹了tinyxml解析器中的所有的類以及類之間的關系。
創建上述格式的xml,代碼如下:

?

?


//創建一個XML的文檔對象。
TiXmlDocument *myDocument = new TiXmlDocument();
//創建一個根元素并連接。
TiXmlElement *RootElement = new TiXmlElement("Persons");
myDocument->LinkEndChild(RootElement);
//創建一個Person元素并連接。
TiXmlElement *PersonElement = new TiXmlElement("Person");
RootElement->LinkEndChild(PersonElement);
//創建name元素、age元素并連接。
TiXmlElement *NameElement = new TiXmlElement("name");
TiXmlElement *AgeElement = new TiXmlElement("age");
PersonElement->LinkEndChild(NameElement);
PersonElement->LinkEndChild(AgeElement);
//設置name元素和age元素的內容并連接。
TiXmlText *NameContent = new TiXmlText("lhy");
TiXmlText *AgeContent = new TiXmlText("22");
NameElement->LinkEndChild(NameContent);
AgeElement->LinkEndChild(AgeContent);
myDocument->SaveFile("d://lhy//xml.txt");//保存到文件


只要搞清xml中節點之間的關系,創建不是問題。說白了就是一種輩分關系。
創建搞定了,但是作為C++程序猿,寫完之后,總感覺有點別扭,總感覺哪不對勁。你是否也看出其中存在的貓膩?
對了,些許的代碼中有大量的New指針。在C++中可沒有java中的垃圾回收機制,必須自己來處理這些廢棄的垃圾。但是代碼中卻沒有Delete語句?
上網查了資料,發現很多創建代碼中,都沒有Delete語句?難道是大家都是復制粘貼?還是tinyxml在搞怪?
我總結了以下幾點,但是最后在開發的過程中仍是疑問,但是開發的過程中,沒有出現問題,所以我的程序就暫時如此了。
說法一:很多文章中,都是new沒有delete,是因為tinyxml可以自動釋放,自動銷毀指針,無需開發者手動釋放。
質疑:new出來的可以自動釋放?new出來說明是在堆上創建的,什么時候會自動釋放?程序結束時,自動釋放?那怎么判斷程序結束呢?(在一個模塊中如何析構另一個模塊中的內存區域,我們后面會詳談),所以這種說法不攻自破。
既然tinyxml中有自毀功能,那我們查詢其源代碼,發現果真如此,tinyxml中在析構函數中,有相應的指針釋放。但是并不是每個節點如此的。
源碼中的詳情:

?

?


TiXmlNode::~TiXmlNode()
{
TiXmlNode* node = firstChild;
TiXmlNode* temp = 0;
while ( node )
{
temp = node;
node = node->next;
delete temp;
}
}
void TiXmlNode::Clear()
{
TiXmlNode* node = firstChild;
TiXmlNode* temp = 0;
while ( node )
{
temp = node;
node = node->next;
delete temp;
}
firstChild = 0;
lastChild = 0;
}


我們也知道tinyxml中的類之間存在繼承關系。
那我們看tinyxml中的TixmlElement類:

?

?


TiXmlElement::~TiXmlElement()
{
ClearThis();
}
void TiXmlElement::ClearThis()
{
Clear();
while( attributeSet.First() )
{
TiXmlAttribute* node = attributeSet.First();
attributeSet.Remove( node );
delete node;
}
}


因為TixmlElement是繼承TiXmlNode.但是在TiXmlDocument中并沒有發現TiXmlDocument類的析構函數。
第二種說法:TiXmlDocument對象就是這棵樹的根結點, 在一個完整的文檔中, 除了它, 其余結點必須都是它的后代, 所以TinyXml用了一個很巧妙的方法來析構每一個結點所對應的對象 ---- 每個結點的析構任務都委托給了它的父親, 這樣只要保證父親被正確析構, 或者調用了父親的Clear函數, 它的所有后代都會被正確的析構, 所以對整個文檔來說只要TiXmlDocument對象被正確析構即可。
在創建的上述代碼中,我們發現,所有的節點都是掛在根節點之下的。
其實這句代碼: myDocument->LinkEndChild(RootElement);使用了多態方式。類之間的關系如下:
??
并且LinkEndChild源代碼如下:它是父類TiXmlNode中的方法

?

?


TiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node )
{
assert( node->parent == 0 || node->parent == this );
assert( node->GetDocument() == 0 || node->GetDocument() == this->GetDocument() );
if ( node->Type() == TiXmlNode::DOCUMENT )
{
delete node;
if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN );
return 0;
}
node->parent = this;
node->prev = lastChild;
node->next = 0;
if ( lastChild )
lastChild->next = node;
else
firstChild = node;// it was an empty list.
lastChild = node;
return node;
}


這樣的話:則只要刪除根節點,在程序中myDocument,就相當于把刪除了TiXmlNode,相當于調用了TiXmlNode的析構函數。
質疑:網上說這種方式,析構是從葉子到樹根。根據TiXmlNode中的析構函數,我們可以得出,是從樹根到葉子。
但是我們在Delete myDocument時,應該注意一點:
創建文檔時,也就是程序段中的myDocument。若是從堆上創建,則需需要手動釋放。如我們上述的片段中,就是在堆上創建的。
TiXmlDocument *myDocument=new TiXmlDocument ();
若是從棧上創建,則不須我們手動釋放,而是程序自動調用析構函數。同時我們應該注意,其他的元素必須在堆上創建。因為在TiXmlNode析構函數中,是delete的,但是棧上的東東是不須delete,所以除了根節點之外連接的后代節點是必須從堆上創建。
經過我們解釋,明白tinyxml中的原理了嗎?只要理解了tinyxml中的類的作用以及類之間的關系,看源碼是沒問題滴哦。
這篇博客根據創建xml小demo解釋了其中存在的疑問。那下篇博客中我們會根據解析xml來答疑解析中存在的問題。

以上所述就是怎么利用tinyxml操縱xml和應該注意的問題有哪些的介紹,希望大家能夠喜歡,更多內容請繼續關注武林技術頻道網站!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91网站免费看| 日韩精品视频免费专区在线播放| 91视频免费在线| 九九久久综合网站| 日韩欧美国产一区二区| 日韩在线观看免费全集电视剧网站| 亚洲色图18p| 精品调教chinesegay| 国产高清在线不卡| 97在线免费观看| 色哟哟亚洲精品一区二区| 国产精品偷伦一区二区| 亚洲欧美日韩天堂一区二区| 性欧美长视频免费观看不卡| 国产在线视频2019最新视频| 一本色道久久88综合亚洲精品ⅰ| 国产精品久久久久久久av电影| 色爱av美腿丝袜综合粉嫩av| 亚洲图片欧洲图片av| 日韩中文有码在线视频| 国产一区二区黄| 久久国产精品视频| 懂色av一区二区三区| 欧美日本在线视频中文字字幕| 欧美一级成年大片在线观看| 国产精品影片在线观看| 久久久久久久国产精品视频| 久久久女人电视剧免费播放下载| 久久久这里只有精品视频| 日韩精品在线免费观看视频| 国产精品一区二区av影院萌芽| 国产成人激情视频| 国产精品久久久999| 一道本无吗dⅴd在线播放一区| 亚洲美女激情视频| 97国产成人精品视频| 欧美日韩一区免费| 久久精品电影一区二区| 亚洲一区www| 欧美性生交大片免费| 欧美精品一区二区三区国产精品| 久久久精品日本| 精品亚洲国产视频| 国产一区二区日韩| 国产精品久久久久久久久粉嫩av| 日本亚洲精品在线观看| 国模叶桐国产精品一区| 日韩精品高清在线观看| 亚洲精品一区久久久久久| 日韩在线观看免费全集电视剧网站| 成人av电影天堂| 亚洲欧美日韩一区二区三区在线| 亚洲影院污污.| 日韩中文字幕不卡视频| 亚洲国产日韩欧美在线图片| 国产精品美乳一区二区免费| 97国产精品免费视频| 国产成人精品国内自产拍免费看| 欧美成人免费小视频| 久久久噜噜噜久久| 欧美国产日韩二区| 色av中文字幕一区| 国产亚洲人成网站在线观看| 日韩免费在线看| 色妞久久福利网| 久久久久久999| 久久九九精品99国产精品| 91精品在线国产| 日韩精品视频免费在线观看| 4438全国亚洲精品在线观看视频| 91久久久久久国产精品| 欧美日韩一区二区三区在线免费观看| 上原亚衣av一区二区三区| 欧美性猛交xxxx黑人| 色噜噜国产精品视频一区二区| 日韩精品在线视频| y97精品国产97久久久久久| 夜夜嗨av一区二区三区四区| 久久精品99久久久香蕉| 日韩精品视频在线观看免费| 91免费国产网站| 国产91亚洲精品| 日日狠狠久久偷偷四色综合免费| 日韩有码片在线观看| 欧美日韩在线视频一区二区| 色偷偷av一区二区三区乱| 欧美性生活大片免费观看网址| 国产精品久在线观看| 日韩欧美aaa| 亚洲欧洲av一区二区| 日韩精品视频在线| 国产香蕉97碰碰久久人人| 8x海外华人永久免费日韩内陆视频| 日韩毛片在线观看| 亚洲国产天堂久久综合| 精品成人乱色一区二区| 国产91精品最新在线播放| 国产精品狼人色视频一区| 日本精品视频在线观看| 欧美黄色免费网站| 久久精品中文字幕| 久久久久久久久久久免费精品| 国产精品成人国产乱一区| 亚洲一区美女视频在线观看免费| 韩国视频理论视频久久| 欧美丰满少妇xxxxx做受| 亚洲2020天天堂在线观看| 亚洲欧洲第一视频| 日韩理论片久久| 亚洲美腿欧美激情另类| 91av在线视频观看| 亚洲激情在线视频| 精品久久久在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 国产精品美女在线| 久久久久国色av免费观看性色| 高清一区二区三区日本久| 日韩电影免费在线观看| 亚州成人av在线| 91精品国产777在线观看| 国产一区二区在线免费| 精品一区二区亚洲| 人体精品一二三区| 成人福利视频在线观看| 91精品久久久久久久久久| 国产精品91久久久久久| 亚洲第一福利网站| 美女扒开尿口让男人操亚洲视频网站| 最近2019中文免费高清视频观看www99| 91在线精品视频| 欧美精品在线极品| 亚洲自拍小视频| 久久久久北条麻妃免费看| 亚洲娇小xxxx欧美娇小| 日韩精品免费在线| 欧美中文在线免费| 欧美成人黑人xx视频免费观看| 国产午夜精品久久久| 欧美性生交大片免网| 精品无人区太爽高潮在线播放| 亚洲男人天堂网| 欧美性黄网官网| 亚洲成人性视频| 国产丝袜精品第一页| 91亚洲va在线va天堂va国| 欧美激情视频免费观看| 久久香蕉国产线看观看网| 97久久久久久| 久久91超碰青草是什么| 国产免费久久av| 欧美电影《睫毛膏》| 亚洲国产中文字幕久久网| 成人h片在线播放免费网站| 国产精品美女久久久久久免费| 中文字幕精品一区久久久久| 日本a级片电影一区二区| 亚洲综合在线中文字幕| 久久亚洲精品小早川怜子66| 亚洲香蕉av在线一区二区三区| 亚洲男人7777| 国内精品一区二区三区四区| 国产精品视频地址| 欧美专区在线视频| 欧美午夜久久久|