国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁(yè) > 編程 > C > 正文

怎么利用tinyxml操縱xml和應(yīng)該注意的問(wèn)題有哪些

2020-02-24 14:38:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

在上篇博客中,大概了解了tinyxml工具的架構(gòu),那這篇博客,我們?cè)敿?xì)講述如何利用tinyxml操縱xml。以及在操作的過(guò)程中,我們應(yīng)該注意的問(wèn)題。
首先把tinyxml源文件導(dǎo)入自己的工程中,效果如下:?
????

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


若您的系統(tǒng)是win7或office是2007以上的,添加文件這個(gè)功能是不能用的,結(jié)果是:或直接崩潰。或沒(méi)反應(yīng)。解決方案如下:?
http://www.56wlw.com/article/32996.htm
環(huán)境準(zhǔn)備好了,那么我們開(kāi)始動(dòng)手操作吧。正如對(duì)數(shù)據(jù)庫(kù)表操作一樣---增刪改查。根據(jù)此邏輯,那就從增(創(chuàng)建)開(kāi)始。
創(chuàng)建的格式如下:

?

?




lhy
22

?


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

?

?


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


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

?

?


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中的類之間存在繼承關(guān)系。
那我們看tinyxml中的TixmlElement類:

?

?


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


因?yàn)門(mén)ixmlElement是繼承TiXmlNode.但是在TiXmlDocument中并沒(méi)有發(fā)現(xiàn)TiXmlDocument類的析構(gòu)函數(shù)。
第二種說(shuō)法:TiXmlDocument對(duì)象就是這棵樹(shù)的根結(jié)點(diǎn), 在一個(gè)完整的文檔中, 除了它, 其余結(jié)點(diǎn)必須都是它的后代, 所以TinyXml用了一個(gè)很巧妙的方法來(lái)析構(gòu)每一個(gè)結(jié)點(diǎn)所對(duì)應(yīng)的對(duì)象 ---- 每個(gè)結(jié)點(diǎn)的析構(gòu)任務(wù)都委托給了它的父親, 這樣只要保證父親被正確析構(gòu), 或者調(diào)用了父親的Clear函數(shù), 它的所有后代都會(huì)被正確的析構(gòu), 所以對(duì)整個(gè)文檔來(lái)說(shuō)只要TiXmlDocument對(duì)象被正確析構(gòu)即可。
在創(chuàng)建的上述代碼中,我們發(fā)現(xiàn),所有的節(jié)點(diǎn)都是掛在根節(jié)點(diǎn)之下的。
其實(shí)這句代碼: myDocument->LinkEndChild(RootElement);使用了多態(tài)方式。類之間的關(guān)系如下:
??
并且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;
}


這樣的話:則只要?jiǎng)h除根節(jié)點(diǎn),在程序中myDocument,就相當(dāng)于把刪除了TiXmlNode,相當(dāng)于調(diào)用了TiXmlNode的析構(gòu)函數(shù)。
質(zhì)疑:網(wǎng)上說(shuō)這種方式,析構(gòu)是從葉子到樹(shù)根。根據(jù)TiXmlNode中的析構(gòu)函數(shù),我們可以得出,是從樹(shù)根到葉子。
但是我們?cè)贒elete myDocument時(shí),應(yīng)該注意一點(diǎn):
創(chuàng)建文檔時(shí),也就是程序段中的myDocument。若是從堆上創(chuàng)建,則需需要手動(dòng)釋放。如我們上述的片段中,就是在堆上創(chuàng)建的。
TiXmlDocument *myDocument=new TiXmlDocument ();
若是從棧上創(chuàng)建,則不須我們手動(dòng)釋放,而是程序自動(dòng)調(diào)用析構(gòu)函數(shù)。同時(shí)我們應(yīng)該注意,其他的元素必須在堆上創(chuàng)建。因?yàn)樵赥iXmlNode析構(gòu)函數(shù)中,是delete的,但是棧上的東東是不須delete,所以除了根節(jié)點(diǎn)之外連接的后代節(jié)點(diǎn)是必須從堆上創(chuàng)建。
經(jīng)過(guò)我們解釋,明白tinyxml中的原理了嗎?只要理解了tinyxml中的類的作用以及類之間的關(guān)系,看源碼是沒(méi)問(wèn)題滴哦。
這篇博客根據(jù)創(chuàng)建xml小demo解釋了其中存在的疑問(wèn)。那下篇博客中我們會(huì)根據(jù)解析xml來(lái)答疑解析中存在的問(wèn)題。

以上所述就是怎么利用tinyxml操縱xml和應(yīng)該注意的問(wèn)題有哪些的介紹,希望大家能夠喜歡,更多內(nèi)容請(qǐng)繼續(xù)關(guān)注武林技術(shù)頻道網(wǎng)站!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
亚洲www色| 国产一级在线观看www色| 国产一二三区精品视频| 亚洲www色| 精品成人一区二区三区免费视频| 91caoporn在线| 国产中文字幕网| 中文字幕视频在线| 国产福利一区二区在线精品| 国产福利小视频在线观看| 在线观看av网站| av在线首页| 国产一区二区三区不卡免费观看| 国产偷激情在线| 亚洲成a人v欧美综合天堂麻豆| 俺来俺也去www色在线观看| 福利资源在线久| 国产寡妇树林野战在线播放| av在线官网| 国产一区电影| 波多野结衣久久高清免费| 黄色av网站在线免费观看| 最近中文字幕mv免费高清视频8| 国产黄色在线网站| 日本一级理论片在线大全| 大香伊人久久| 在线观看国产福利视频| 国产永久免费高清在线观看| 精品麻豆视频| 国产你懂的在线观看| √天堂8资源中文在线| aaa大片在线观看| 导航福利在线| 欧美日韩性视频一区二区三区| 国产一区二区三区不卡在线| 超碰免费在线观看| 99热在线免费播放| 蜜桃视频中文字幕| 在线观看精品视频一区二区三区| 国产极品视频| 国产精品偷乱一区二区三区 | 日本一二三区视频免费高清| 国产黄色片在线播放| 天堂亚洲精品| 成人欧美精品久久久久影院| 免费男女羞羞的视频网站中文字幕| 国产福利免费观看| 国产区高清在线| 国产精品久久久久久福利| 九九热免费视频| 黄色av免费在线| 国产69精品久久久久孕妇国产69久久 | 亚洲欧美综合乱码精品成人网 | 亚洲欧美日韩综合精品网| 天天操天天操天天色天天要| 久久av少妇| 国产在线更新| 尤物视频网站在线观看| 国产在线视频自拍| 久草一本av| 国产精品伦一区二区三区级视频频 | 97国产在线| 国产超级va在线视频| 国产二区三区在线| 国产精品区一区二| 精品无人乱码| 牛牛热在线视频| 日本动漫理论片在线观看网站| 国产精品久久久久久精| 国产精品免费91| 在线观看av网站| 色悠久久久久综合网小说| 看成年女人免费午夜视频| wwww在线观看免费视频| 久草亚洲一区| 18av在线播放| 国产主播福利在线| 国产极品美女到高潮| 在线成人一区| 国产一区二区影视| wwww亚洲| 精品美女调教视频| 天堂中文在线视频| 亚洲精品影视在线| 国产激情三区| 成人免费一区二区三区视频网站| 国产黄色在线| 88av在线| 久久五月精品| 亚洲精品午夜级久久久久| 国产一二三在线观看| 欧美日韩在线视频免费观看| 国产激情在线视频| 国产理论电影在线| 亚洲精品白浆| av一本在线| 96久久久久久| 中文字幕一区二区三区免费视频| 欧美成人久久电影香蕉| 国产黄视频网站| 成年网在线观看免费观看网址| sese在线视频| 四虎国产精品永久地址998| 2018av男人天堂| 国产亚洲精品自在线观看| 国产女人在线观看| 美女国产在线| 久热久精久品这里在线观看| av资源网站在线观看| av中文资源在线| 99精品老司机免费视频| 91sp网站在线观看入口| 天堂资源在线中文| 天天操天天射天天插| 中文字幕中文字幕在线中高清免费版 | av中文字幕在线看| 999精品网| 2018中文字幕在线观看| 精品一区二区在线欧美| 在线成人一区| 成人超碰在线| 国产a级网站| www.狠狠操| 久草在线资源福利| 国产精品美女视频免费观看软件| 国产高清av| www.超级碰| 中文字幕一区二区三区免费视频| 国产黄大片在线观看画质优化| 2020中文字幕在线播放| 日本片在线看| 国产网站在线免费观看| 在线播放国产区| 国产在线一二三区| 国产欧美日韩专区| av在线不卡免费| 国产无遮挡又黄又爽免费软件| 在线影视一区| 国产一二三区精品视频| 日本天堂影院在线视频| 国产精品亚洲第五区在线| av男人的天堂网| 国产日产精品久久久久久婷婷| 午夜影院免费| 国产福利一区二区在线精品| 开心丁香婷婷深爱五月| 97一区二区三区| 最近高清中文在线字幕在线观看| www.av在线| 国产精品爱久久久久久久小说| 伊人影院在线观看| 国产欧美日韩第一页| 超碰国产在线观看| 在线中文字幕视频| 国产毛片毛片毛片| 欧美国产中文| 免费a级在线播放| 天天干天天操天天爽| 在线国产网址| 97在线免费| 91香蕉视频免费在线观看| 国产精品视频一区麻豆| 国产一二区视频| 国产三级视频在线播放线观看| 最近中文字幕大全中文字幕免费| 久草在线视频网| 免费视频中文字幕| 四虎影院成人| 国产免费福利| 国产区视频在线观看| 九色福利视频| 国产在线激情视频| 国产在线资源| 欧美激情福利视频在线观看免费| 国产精品视频h| 九九精品九九| 国产免费av在线| 成年网站免费入口在线观看| 国产九色在线| 中文字幕不卡免费视频| 国产精品久久久久永久免费看| 精品美女在线观看视频在线观看 | 老鸭窝av在线| 中文字幕在线观看日本| 久久精品免视着国产成人| 九九在线视频| 国产一二区在线观看| 2018中文字幕在线| 欧美日韩在线视频免费观看| 中文字幕欧美日韩在线不卡| 国产成人精品综合网站| 伊人影院在线视频| 成人av小说网| 在线免费看黄网站| 国产免费av高清在线| 国产一二在线观看| 青青艹在线视频| 国产丝袜精品丝袜| 日本不卡视频一区二区| 国产麻豆精品视频一区二区|