TinyXml使用指南_第1頁(yè)
TinyXml使用指南_第2頁(yè)
TinyXml使用指南_第3頁(yè)
TinyXml使用指南_第4頁(yè)
TinyXml使用指南_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、TinyXml使用指南(1) 作者:tamsyn  來(lái)源:  時(shí)間:2006-8-16  【 字體:大 中 小 】  雙擊滾屏 在這里我們并不是要講解如何使用XML,或在網(wǎng)頁(yè)中使用它。而是要在C/C+中使用它。詳細(xì)一點(diǎn)就是在C/C+嵌套使用XML文件。要在C/C+中使用XML文件,你就必須需要一個(gè)能分析XML文件的函數(shù)庫(kù)。在這方面有很多,比如libxml2,tinxml,expat等等很多。而我使用的是tinyxml,為什么要使用它呢?因?yàn)樗苄∏桑挥袃蓚€(gè)頭文件和四個(gè)CPP文件。正如作者在tinyxml官方文件中所說(shuō)的,如果你不是想在瀏覽器中使用XML

2、,那么tinyxml非常適合你。我們下面來(lái)看一下tinyxml是如何在C/C+中建立XML文件的。char floader200,buffer200;    TiXmlDocument* m_xmlDoc = new TiXmlDocument();TiXmlElement xElement("player");sprintf(buffer,"%d", 1);xElement.SetAttribute("admin",

3、0;buffer);TiXmlElement xPos("pos");sprintf(buffer,"%d",2);xPos.SetAttribute("x", buffer);sprintf(buffer,"%d",3);xPos.SetAttribute("y", buffer);sprintf(buffer,"%d",4);xPos.SetAttribute("zone", buffer);xElement.I

4、nsertEndChild(xPos);m_xmlDoc->InsertEndChild(xElement);sprintf(floader,"%s.xml", "antking");m_xmlDoc->SaveFile(floader);delete m_xmlDoc; 這段簡(jiǎn)單的代碼的作用就是將用戶(hù)數(shù)據(jù)保存在XML文件中。不同的是我對(duì)其做了一些簡(jiǎn)化。這段代碼的作用就是先建立一個(gè)XML文件句柄。TiXmlDocument* m_xmlDoc = new TiXmlDocu

5、ment();然后建立一個(gè)成員。TiXmlElement xElement("player");sprintf(buffer,"%d", 1);xElement.SetAttribute("admin", buffer);然后再建立一個(gè)成員。TiXmlElement xPos("pos");sprintf(buffer,"%d",2);xPos.SetAttribute("x", buffer);sprintf(buffer,

6、"%d",3);xPos.SetAttribute("y", buffer);sprintf(buffer,"%d",4);xPos.SetAttribute("zone", buffer);這個(gè)成員包含3個(gè)屬性。接下來(lái)是將這個(gè)成員連接成上一個(gè)成員的子結(jié)點(diǎn)。xElement.InsertEndChild(xPos);然后再把上一個(gè)結(jié)點(diǎn)連接成為XML文件的子結(jié)點(diǎn)。m_xmlDoc->InsertEndChild(xElement);最后保存這個(gè)文件。sprintf(floader,"

7、;%s.xml", "antking");m_xmlDoc->SaveFile(floader);釋放句柄。delete m_xmlDoc;這就是創(chuàng)建XML文件的過(guò)程。這段代碼將產(chǎn)生一個(gè)文件,文件內(nèi)容如下:<pos x="2" y="3" zone="4" ></pos x="2" y="3" zone="4" >它產(chǎn)

8、生的結(jié)構(gòu)可以用一棵樹(shù)來(lái)表示,見(jiàn)下圖:             接下來(lái),我們看一下如何從上面這個(gè)XML文件中讀出數(shù)據(jù)。char floader200,buffer200;TiXmlDocument* m_xmlDoc;int admin1,x1,y1,z1; sprintf(floader,"%s.xml", "antking");m_xmlDoc = new 

9、;TiXmlDocument(floader);if (m_xmlDoc->LoadFile()TiXmlElement *xPlayer = 0;xPlayer = m_xmlDoc->FirstChildElement("player");if (xPlayer)if (xPlayer->Attribute("admin")admin1= (bool)atoi(xPlayer->Attribute("admin");T

10、iXmlElement *xZone = 0;xZone = xPlayer->FirstChildElement("pos");x1 = (int)atoi(xZone->Attribute("x");y1 = (int)atoi(xZone->Attribute("y");z1 = (int)atoi(xZone->Attribute("zone");delete m_

11、xmlDoc;printf("%d,%d,%d,%d",admin1,x1,y1,z1);     這段代碼的意思就是,先建立一個(gè)文件句柄,如果句柄建立成功就打開(kāi)一個(gè)XML文件。XML文件打開(kāi)后,先得到它的第一個(gè)子結(jié)點(diǎn),如果子結(jié)點(diǎn)存在,得到這個(gè)結(jié)點(diǎn)的屬性。然后又打開(kāi)這個(gè)結(jié)點(diǎn)的第一個(gè)子結(jié)點(diǎn),讀出其中的數(shù)據(jù)。最后關(guān)閉文件句柄。#include "iostream"#include "fstream"#include "tinyxml.h"using namespace std;int ma

12、in()string filename = "first.xml"TiXmlDocument* doc = new TiXmlDocument(filename.c_str();/ 在這里復(fù)制文件/std:ifstream ifs(filename.c_str();char buffer1024;char c, *p = buffer;while(ifs.get(c)  *p+=c;*p = 0;ifs.close();/if(!doc->Parse(buffer)  cout << doc->ErrorDes

13、c() << endl;const TiXmlElement* root = doc->RootElement();for( const TiXmlNode* child = root->FirstChild();  child;  child=child->NextSibling()  OutputDebugStringA(child->Value();  /*  生成一個(gè)StaticBox     

14、0;    */  if(child->Type() = TiXmlNode:ELEMENT) && (!strcmp(child->Value(),"staticbox")     const TiXmlElement *box = (const TiXmlElement*)child;   double px, py, pz;double dx, dy, dz;std:string mesh;   mes

15、h = box->Attribute("mesh");   for(const TiXmlNode *sub_tag = box->FirstChild(); sub_tag; sub_tag = sub_tag->NextSibling() )       if(sub_tag->Type() = TiXmlNode:ELEMENT)         const TiXmlElement *

16、sub_element = (const TiXmlElement*)sub_tag;     if(!strcmp(sub_tag->Value(),"position")           px = (sub_element->Attribute("x",&px)?px:0.0;      py = (sub_element->

17、;Attribute("y",&py)?py:0.0;      pz = (sub_element->Attribute("z",&pz)?pz:0.0;          else if(!strcmp(sub_tag->Value(),"dimension")         

18、0; dx = (sub_element->Attribute("x",&dx)?dx:1.0;      dy = (sub_element->Attribute("y",&dy)?dy:1.0;      dz = (sub_element->Attribute("z",&dz)?dz:1.0;      

19、60;        cout << "n"   cout << "tPosition = (" << px << ", " << py << ", " << pz << ")n"   cout << "tDimension = (" << dx << ", " << dy << ", &qu

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論