XML解析器(TinyXML)的使用指南
1.首先下载TinyXML库的文件,这里给出链接,大家自己去下吧,记着要上国际
http://prdownloads.sourceforge.net/tinyxml/tinyxml_2_3_4.zip?download
2.下载后解压这个压缩包,把所有的东西放到一个找的着的地方(比如,E:\开发库\TinyXML)
3.用Visual C++(推荐VC++.NET2003)创建一个新的工程(Win32控制台)
4.在TinyXML的目录里面找到tinystr.h, tinyxml.h, tinystr.cpp, tinyxml.cpp, tinyxmlerror.cpp, tinyxmlparser.cpp六个文件加入到刚刚创建的项目中去
5.打开tinyxml.h, 在第一行加入下面这行:
#define TIXML_USE_STL
6.然后创建一个cpp文件,输入下面的内容:
1. #include <iostream>
#include <fstream>
#include "tinyxml.h"
using namespace std;
int main()
{
string filename = "first.xml";
TiXmlDocument* doc = new TiXmlDocument(filename.c_str());
//////////////////////////////////////////////////////////////////////////
// 在这里复制文件
//////////////////////////////////////////////////////////////////////////
std::ifstream ifs(filename.c_str());
char buffer[1024];
char c, *p = buffer;
while(ifs.get(c))
{
*p++=c;
}
*p = 0;
ifs.close();
//////////////////////////////////////////////////////////////////////////
if(!doc->Parse(buffer))
{
cout << doc->ErrorDesc() << endl;
}
const TiXmlElement* root = doc->RootElement();
for( const TiXmlNode* child = root->FirstChild();
child;
child=child->NextSibling())
{
OutputDebugStringA(child->Value());
/*
生成一个StaticBox
<staticbox mesh="crate.mesh">
<position x="-8" y="2" z="4" />
<dimension x="2" y="4" z="2" />
</staticbox>
*/
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;
mesh = 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 *sub_element = (const TiXmlElement*)sub_tag;
if(!strcmp(sub_tag->Value(),"position"))
{
px = (sub_element->Attribute("x",&px))?px:0.0;
py = (sub_element->Attribute("y",&py))?py:0.0;
pz = (sub_element->Attribute("z",&pz))?pz:0.0;
}
else if(!strcmp(sub_tag->Value(),"dimension"))
{
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;
}
}
}
cout << "<StaticBox>\n";
cout << "\tPosition = (" << px << ", " << py << ", " << pz << ")\n";
cout << "\tDimension = (" << dx << ", " << dy << ", " << dz << ")\n\n";
}
}
delete doc;
getchar();
return 0;
}
7.然后在项目的文件夹中加入一个xml文件,如下:
<?xml version="1.0" encoding="utf-8" ?>
<Scene>
<staticbox mesh="crate.mesh">
<position x="-8" y="2" z="4" />
<dimension x="2" y="4" z="2" />
</staticbox>
<staticbox mesh="crate.mesh">
<position x="3" y="2" z="4" />
<dimension x="2" y="4" z="2" />
</staticbox>
</Scene>
8.编译运行
XML解析器(TinyXML)的使用指南的更多相关文章
- tinyxml一个优秀的C++ XML解析器
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...
- TinyXML:一个优秀的C++ XML解析器
//-------------------------------------------------------------------------------------------------- ...
- TinyXML:一个优秀的C++ XML解析器[转]
TinyXML:一个优秀的C++ XML解析器 读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似 ...
- 转:TinyXM--优秀的C++ XML解析器
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...
- XML解析器(转)
常见C/C++ XML解析器有tinyxml.XERCES.squashxml.xmlite.pugxml.libxml等等,这些解析器有些是支持多语言的,有些只是单纯C/C++的.如果你是第一次接触 ...
- Duilib源码分析(三)XML解析器—CMarkup
上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...
- XML 解析器
所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象. 解析 XML 文档为DOM对象 方法一: ...
- Java XML解析器
使用Apache Xerces解析XML文档 一.技术概述 在用Java解析XML时候,一般都使用现成XML解析器来完成,自己编码解析是一件很棘手的问题,对程序员要求很高,一般也没有专业厂商或者开源组 ...
- Xml的转义字符--约束-xml解析器
XML解析器:Dom适合增删改查(crud),缺点就是内存消耗大: Sax:内存消耗非常小,解析速度快,但是不适合增删改:
随机推荐
- TextView过长显示省略号, TextView文字中间加横线
1.TextView显示的内容过长时自动显示省略号: 省略号的位置:android:ellipsize="end" 省略号在结尾android:ellipsize=" ...
- GetJsonByDataTable
public string getJsonByModel(DataTable dt) { StringBuilder nsb = new StringBuilder(); ; i < dt.Ro ...
- Code First研究学习1_Reverse Enginner Code First
最近因为公司需要,自己开始研究Code First,之前还是听说过这个,也知道是代码优先的意思!至于具体怎么的代码优先,我的理解如下! 在听说code first的时候,心里也就觉得怪了,是怎么将M ...
- 批处理备份和恢复mysql数据库
备份 set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%" md "D: ...
- angularjs中的绑定策略“@”,“=”,“&”实例
<!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...
- 洛谷 P1305 新二叉树
P1305 新二叉树 题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输 ...
- 控件真的很好用,突然感觉自己以前研究Discuz!NT366源码的方式很2了
控件真的很好用,突然感觉自己以前研究Discuz!NT366源码的方式很2了,就是按钮上的或其他控件上的图片哪里去了?
- javaScript的select元素和option的相关操作
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- MVC模式下xml文件的解析
第一次写blog,组织不当和出错的地方还请大家多担当哈. java操作xml文件的方式中用的较多的有四种,DOM.SAX.JDOM.DOM4J.除第一种外其余的三种我都有试过,这后三种方案中我选择用S ...
- 你不知的IE的bug及其解决方案
E令人咬牙切齿的bug不胜枚举,其中IE6更是臭名昭著,令人发指.这里总结出IE下最为严重的5个bug,及其应对方案. 1.IE6下无法显示png格式的透明信息 这个bug是众多网页设计师的噩梦,虽然 ...