TinyXml使用指南_第1页
TinyXml使用指南_第2页
TinyXml使用指南_第3页
TinyXml使用指南_第4页
TinyXml使用指南_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、TinyXml使用指南(1) 作者:tamsyn  来源:  时间:2006-8-16  【 字体:大 中 小 】  双击滚屏 在这里我们并不是要讲解如何使用XML,或在网页中使用它。而是要在C/C+中使用它。详细一点就是在C/C+嵌套使用XML文件。要在C/C+中使用XML文件,你就必须需要一个能分析XML文件的函数库。在这方面有很多,比如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; 这段简单的代码的作用就是将用户数据保存在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;这就是创建XML文件的过程。这段代码将产生一个文件,文件内容如下:<pos x="2" y="3" zone="4" ></pos x="2" y="3" zone="4" >它产

8、生的结构可以用一棵树来表示,见下图:             接下来,我们看一下如何从上面这个XML文件中读出数据。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文件打开后,先得到它的第一个子结点,如果子结点存在,得到这个结点的属性。然后又打开这个结点的第一个子结点,读出其中的数据。最后关闭文件句柄。#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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论