




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 编译原理及技术实施试题及答案
- 法学概论考试中的竞争策略及试题及答案
- 确保班级多元合作的实施方式计划
- 甘肃省武威市第五中学2025年七下数学期末质量检测模拟试题含解析
- 网络管理员的创新思维研讨试题及答案
- 企业社交责任与其战略决策的相互影响试题及答案
- 增强科学实验的实践能力计划
- 仓库内外部沟通机制改进计划
- 长期投资与短期投资的区别计划
- 财政政策与货币政策的互动试题及答案
- 2023-2024学年上海市宝山区八年级(下)期末数学试卷 (含答案)
- 2025年中考数学模拟考试卷(附答案)
- 汽车合伙合同协议书
- 四川省九师联盟2025届高三仿真模拟卷物理试卷及答案(HG)
- 2025年保密法基础知识考试题库带答案(预热题)参考答案详解
- 乙状结肠癌试题及答案
- 2025夏季安徽蚌埠市东方人力资源有限劳务派遣人员招聘30人笔试参考题库附带答案详解
- 2024年贵州铜仁公开招聘社区工作者考试试题答案解析
- 2025年中央民族大学辅导员招聘考试笔试试题(含答案)
- 4、《通向金融王国的自由之路》
- 配料间管理制度(食品)
评论
0/150
提交评论