




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、TinyXml使用指南(1) 作者:tamsyn 來源: 時間:2006-8-16 【 字體:大 中 小 】 雙擊滾屏 在這里我們并不是要講解如何使用XML,或在網頁中使用它。而是要在C/C+中使用它。詳細一點就是在C/C+嵌套使用XML文件。要在C/C+中使用XML文件,你就必須需要一個能分析XML文件的函數(shù)庫。在這方面有很多,比如libxml2,tinxml,expat等等很多。而我使用的是tinyxml,為什么要使用它呢?因為它很小巧,只有兩個頭文件和四個CPP文件。正如作者在tinyxml官方文件中所說的,如果你不是想在瀏覽器中使用XML
2、,那么tinyxml非常適合你。我們下面來看一下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; 這段簡單的代碼的作用就是將用戶數(shù)據保存在XML文件中。不同的是我對其做了一些簡化。這段代碼的作用就是先建立一個XML文件句柄。TiXmlDocument* m_xmlDoc = new TiXmlDocu
5、ment();然后建立一個成員。TiXmlElement xElement("player");sprintf(buffer,"%d", 1);xElement.SetAttribute("admin", buffer);然后再建立一個成員。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);這個成員包含3個屬性。接下來是將這個成員連接成上一個成員的子結點。xElement.InsertEndChild(xPos);然后再把上一個結點連接成為XML文件的子結點。m_xmlDoc->InsertEndChild(xElement);最后保存這個文件。sprintf(floader,"
7、;%s.xml", "antking");m_xmlDoc->SaveFile(floader);釋放句柄。delete m_xmlDoc;這就是創(chuàng)建XML文件的過程。這段代碼將產生一個文件,文件內容如下:<pos x="2" y="3" zone="4" ></pos x="2" y="3" zone="4" >它產
8、生的結構可以用一棵樹來表示,見下圖: 接下來,我們看一下如何從上面這個XML文件中讀出數(shù)據。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); 這段代碼的意思就是,先建立一個文件句柄,如果句柄建立成功就打開一個XML文件。XML文件打開后,先得到它的第一個子結點,如果子結點存在,得到這個結點的屬性。然后又打開這個結點的第一個子結點,讀出其中的數(shù)據。最后關閉文件句柄。#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();/ 在這里復制文件/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(); /* 生成一個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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 儲備干部面試題及答案
- java面試題及答案項目經驗
- 消化系統(tǒng)疾病護理共同要點
- 保育員消毒培訓
- 2025年中國木制小提琴弓行業(yè)市場全景分析及前景機遇研判報告
- 腫瘤科急診的護理
- 中風中醫(yī)護理病例討論
- 中心靜脈壓測量護理查房
- 流程講解規(guī)范實施指南
- 直腸癌術后引流管的護理
- 2025-2030中國鋼制車輪行業(yè)競爭格局與盈利前景預測報告
- 供水加壓泵站管理制度
- 保險公司保密管理制度
- 2025年執(zhí)業(yè)藥師資格證之《西藥學專業(yè)一》預測試題附答案詳解【模擬題】
- 一體化政務大數(shù)據體系建設實踐指南1.0
- 2025年湖北省高考地理試卷真題(含答案解析)
- 基礎寫作的試題及答案
- 2025年重慶市中考歷史真題(解析版)
- 2025年四川省成都市中考語文真題(原卷版)
- 江蘇開放大學2025年春服務營銷1單項選擇題題庫
- 駕駛證a1教育考試試題及答案
評論
0/150
提交評論