- 浏览: 2036708 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
TinyXML入门教程 XML全称EXtensible Markup Language,翻译为可扩展标记语言,简而言之就是你可以自定义数据的标识,以此来区分各种不同的数据,以便于进行数据交换,例如html就可以理解为一种简单的xml语言。XML文件通常就是一个文本文件,可以使用任何编码 TinyXml使用文档对象模型(DOM)来解析xml文件,这种模型的处理方式为在分析时,一次性的将整个XML文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,但可以给用户提供一个面向对象的访问接口,对用户更为友好,非常方便用户使用。下面我们依次来介绍各个类的用法。 文档类代表一个XML文档,通过它,你可以保存,载入和打印输出文档。你可以通过以下方式载入xml文档到TiXmlDocument。 l 创建一个空的文档对象,然后载入一个xml文档 文档类提供了Print()函数用于在控制台输出当前的文档内容,这个函数的原形如下: <!--comment 注释--> <element attribute="this a attribute(这是一个属性)" int= "1" float = "3.14"> 由于文件使用UTF-8编码,而Windows下的控制台默认使用gb2312编码,因此会生成乱码。
当然你也可以使用SaveFile()函数来进行另存为,这个函数的原形如下: 另外文档对象还提供了一个实用的函数用于返回第一个根对象,它可以让你方便的遍历整个文档结构,查找自己需要的数据。函数原形如下: 在标准的XML文件中,声明为文件的第一项,例如<?xml version="1.0" standalone="yes"?>,声明对象具有三个属性值,版本,编码和独立文件声明 在程序中你可以如下使用: 这个类一般为xml数据提供解释说明,在程序中一般不使用它,因此,这里就不介绍了。 元素为一个容器类,它具有元素名称,并可以包含其它元素,文本,注释和未知节点,这些对象统称为元素的节点,即节点可以为元素、文本、注释和未知节点类型。元素也可以包含任意个数的属性。 在上方元素的代码中,element为根元素的名称,你可以通过如下的函数来设置和返回它。 subelement1,subelement2,subelement3,subelement4都是element的子元素,如果当前元素对象的指针指向subelement1,subelement2,subelement3,subelement4,你可以通过Parent()函数来返回指向element对象的指针,Parent()函数的声明如下: 通过父节点的指针,你可以遍历所有的子节点。 +TiXmlNode* LastChild() 你也可以使用IterateChildren()函数来依次遍历所有的节点,它们的函数声明如下: 你可以插入、删除替换所有的子节点。 +TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); +bool RemoveChild( TiXmlNode* removeThis ); +TiXmlNode* PreviousSibling() 当然你也可以根据当前的节点,返回下一个节点的指针。带参数名的那个函数表示返回下一个名为_value的节点。 元素是一种特殊的节点,以’<’为开始字符,后接元素名称。函数NextSiblingElement用于返回下一个同级元素,而忽略其它类型的节点。它们的函数声明如下: 本类也提供了相关的函数,让你返回第一个子元素。 属性一般保存在元素中,它们为使用“=”号连接的两个字符串,左边的表示属性名,等号右边的表示属性值,通常使用字符串、整数和浮点数等数据类型表示。例如,pi = 3.14。 另外,本类也提供了如下三个函数让你设置属性,参数的类型和返回函数类似。 FirstAttribute和LastAttribute可以让你返回第一个和最后一个属性,它们的函数声明如下: ValueStr //返回元素名称 FirstChild //返回第一个子节点 InsertEndChild //在最后一个子节点后插入子节点 PreviousSibling //返回同级中前一个节点 NextSiblingElement //返回同级中后一个元素 属性为名称="值"对,元素可以具有属性值,但名称必须唯一。 也可以通过下面三个函数返回属性值: 当然你也可以设置属性值,它们的函数声明如下: 在元素属性中,通常具有许多属性,你可以通过Next函数返回下一个属性对象的指针,也可以通过Previous函数获得上一个属性对象的指针。它们的函数声明如下:
什么是XML? 1
文档类 2
创建文档对象 3
输出文档对象 3
保存文档对象 4
返回第一个根元素 5
声明类 5
注释类 6
元素类 6
节点名 6
父节点 6
子节点 7
编辑子节点 7
同级节点 7
遍历元素 8
元素属性 8
元素函数总结 9
属性类 10
什么是XML?
上图就是我系统中一个xml文件的图标,使用VC2005打开它,你可以看到如下内容:
XML也是有这几个对象组成了,一般来说我们经常使用的类如下:
l TiXmlDocument:文档类,它代表了整个xml文件。
l TiXmlDeclaration:声明类,它表示文件的声明部分,如上图所示。
l TiXmlComment:注释类,它表示文件的注释部分,如上图所示。
l TiXmlElement:元素类,它是文件的主要部分,并且支持嵌套结构,一般使用这种结构来分类的存储信息,它可以包含属性类和文本类,如上图所示。
n TiXmlAttribute/TiXmlAttributeSet:元素属性,它一般嵌套在元素中,用于记录此元素的一些属性,如上图所示。
n TiXmlText:文本对象,它嵌套在某个元素内部,如上图所示。文档类
创建文档对象
使用到的函数原形如下:
+TiXmlDocument();
+bool LoadFile( const std::string& filename)
在程序中你可以如下使用:
//载入xml文档
TiXmlDocument doc();
doc.LoadFile("tutorial.xml");
使用到的函数原形如下:
+TiXmlDocument( const std::string& documentName );
+bool LoadFile();
在程序中你可以如下使用:
//载入xml文档
TiXmlDocument doc("tutorial.xml");
doc.LoadFile();
输出文档对象
+void Print() const
在程序中你可以如下使用:
//载入xml文档
TiXmlDocument doc("tutorial.xml");
doc.LoadFile();
doc.Print(); //输出文档
tutorial.xml的内容如下:
<?xml version="1.0" standalone="yes" encoding="utf-8"?>
<subelement1>
This a text(这是一个文本)
</subelement1>
<subelement2/>
<subelement3/>
<subelement4/>
</element>
在控制台中你可以得到如下输出:保存文档对象
bool SaveFile( const std::string& filename ) const
在程序中你可以如下使用:
//载入xml文档
TiXmlDocument doc("tutorial.xml");
doc.LoadFile();
doc.Print(); //输出文档
cout<<endl;
doc.SaveFile("tutorial.txt");
使用记事本打开tutorial.txt,你可以看到如下内容。返回第一个根元素
+TiXmlElement* RootElement()
我们在介绍元素类的时候再详细介绍它的使用。声明类
一般来说文档的第一行就是声明对象,你可以把文档对象的第一个子节点转换为声明对象。
//使用TinyXml的声明对象
TiXmlDeclaration *decl;
decl = doc.FirstChild()->ToDeclaration();
然后就可以使用它的功能了,它可以让你返回当前的版本,编码等信息,函数原形如下:
+const char *Version() const
+const char *Encoding() const
+const char *Standalone() const
//使用TinyXml的声明对象
TiXmlDeclaration *decl;
decl = doc.FirstChild()->ToDeclaration();
cout<<"使用TinyXml的声明对象(TiXmlDeclaration)"<<endl;
//输出声明对象对应的xml内容
decl->Print(0,4,&str);
cout<<str<<endl;
//分别输出声明对象的属性
cout<<"版本:"<<decl->Version()<<" 是否为对立文件:"<<decl->Standalone()<<" 编码方式:"<<decl->Encoding()<<endl;
cout<<endl; 注释类
元素类
我们还是以如下的XML代码来说明这个类的功能。
<element attribute="this a attribute(这是一个属性)" int= "1" float = "3.14">
<subelement1>
This a text(这是一个文本)
</subelement1>
<subelement2/>
<subelement3/>
<subelement4/>
</element>节点名
+const std::string& ValueStr() const
+void SetValue( const std::string& _value )父节点
+TiXmlNode* Parent()子节点
+TiXmlNode* FirstChild()
+TiXmlNode* FirstChild( const std::string& _value )
上面两个函数用于返回第一个子节点对象的指针,带参数名的那个函数表示返回第一个名为_value的子节点。
+TiXmlNode* LastChild( const std::string& _value )
上面的两个函数用于返回最后一个节点对象的指针,带参数名的那个函数表示返回最后一个名为_value的子节点。
+TiXmlNode* IterateChildren( const TiXmlNode* previous )
+TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous )
带参数名的那个函数表示只遍历同名的节点。编辑子节点
+TiXmlNode* InsertEndChild( const TiXmlNode& addThis );
+TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis );
+TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis );
上面三个函数用于插入节点,InsertEndChild函数让你把新节点插入到末尾,InsertBeforeChild和InsertAfterChild函数允许你在指定的节点位置前后插入节点。
ReplaceChild函数用于替换指定的节点。
RemoveChild函数让你删除指定的节点。
void Clear();
Clear函数会删除本节点的所有子节点(包括子节点包含的从子节点),但不会修改本节点。同级节点
<element attribute="this a attribute(这是一个属性)" int= "1" float = "3.14">
<subelement1>
This a text(这是一个文本)
</subelement1>
<subelement2/>
<subelement3/>
<subelement4/>
</element>
在上面的xml代码中,subelement1、subelement2、subelement3、subelement4都属于同级节点,我们也提供了相关的函数用于在这些同级节点中遍历。
+TiXmlNode* PreviousSibling( const std::string& _value )
可以根据当前的节点,返回上一个节点的指针。带参数名的那个函数表示返回上一个名为_value的节点。
+TiXmlNode* NextSibling()
+TiXmlNode* NextSibling( const std::string& _value)遍历元素
+TiXmlElement* NextSiblingElement()
+TiXmlElement* NextSiblingElement( const std::string& _value)
带参数名的那个函数表示返回下一个名为_value的同级元素。
+TiXmlElement* FirstChildElement()
+TiXmlElement* FirstChildElement( const std::string& _value )
带参数名的那个函数表示返回下一个名为_value的子元素。元素属性
你可以通过如下的函数,返回属性值。
+const std::string* Attribute( const std::string& name ) const;
+const std::string* Attribute( const std::string& name, int* i ) const;
+const std::string* Attribute( const std::string& name, double* d ) const;
在上面3个函数中,第一个函数使用字符串保存返回的属性值,第二个函数把属性值转换为整数然后返回,第三个函数把属性值转换为浮点数然后返回。不过,第二、三个函数都会以字符串的形式记录属性值,并作为函数的返回值返回。
另外,你也可以使用模板函数:
+template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const
来返回特点的属性值,它会根据你传入的参数,自动选择合适数据类型。
+void SetAttribute( const std::string& name, const std::string& _value );
+void SetAttribute( const std::string& name, int _value );
+void SetDoubleAttribute( const char * name, double value );
+TiXmlAttribute* FirstAttribute()
+TiXmlAttribute* LastAttribute()
RemoveAttribute函数可以让你删除指定名称的属性,它的函数声明如下:
+void RemoveAttribute( const std::string& name )元素函数总结
SetValue //设置元素名称
Parent //返回父节点对象
LastChild //返回最后一个子节点
IterateChildren //返回下一个子节点
InsertBeforeChild //在指定的子节点前插入子节点
InsertAfterChild //在指定的子节点后插入子节点
ReplaceChild //替换指定的子节点
RemoveChild //删除指定的子节点
Clear //删除所有的子节点
NextSibling //返回同级中后一个节点
FirstChildElement //返回第一个子元素节点
Attribute //返回元素中的属性值
QueryValueAttribute //返回元素中的属性值
SetAttribute //设置元素中的属性值
FirstAttribute //返回元素中第一个属性对象
LastAttribute //返回元素中最后一个属性对象
RemoveAttribute //删除元素中指定的属性对象属性类
你可以通过
+const std::string& NameTStr() const
返回属性名称
+const std::string& ValueStr() const
+int IntValue() const;
+double DoubleValue() const;
+void SetName( const std::string& _name )
+void SetIntValue( int _value );
+void SetDoubleValue( double _value );
+void SetValue( const std::string& _value )
以上函数与元素类中的相关函数类似,这里不重复介绍了。
+TiXmlAttribute* Next()
+TiXmlAttribute* Previous()
发表评论
-
Berkeley DB 使用经验总结
2012-08-27 14:41 3087作者:陈磊 NoSQL是现在互联网Web2.0时代备受 ... -
嵌入式数据库系统Berkeley DB
2012-08-27 14:37 1534前言 UNIX/LINUX平台下的数据库种类非常多 ... -
C语言中标准输入流、标准输出流、标准错误输出流
2011-06-13 14:32 9294C语言中标准输入流、标准输出流、标准错误输出流 在 ... -
Rsync 实现原理
2011-05-12 20:06 8320Rsync 实现原理 前言 关于rsync的原始文档 ... -
c++简单的虚函数测试
2011-04-27 14:25 1021#include <iostream> u ... -
C++文件行查找
2011-04-26 14:10 1409#include <iostream> # ... -
c++偏特化简单示例
2011-04-13 11:17 2157c++偏特化 // temp1.c ... -
GDB调试精粹及使用实例
2011-03-16 14:06 1142GDB调试精粹及使用实例 一:列文件清单 1. ... -
简单的ini文件解析
2011-02-12 16:36 1624int GetKeyVal(const string s ... -
scanf族函数高级用法
2011-01-25 16:00 2563如何解释 fscanf(fd,&quo ... -
使用scons替代makefile(1)
2011-01-25 11:58 3734早在多年前我刚开始接触linux下的C程序时,经常被makef ... -
使用scons替代makefile(2)
2011-01-25 11:57 3585本篇文章接着上一篇进一步介绍scons的使用方法,主要介绍静态 ... -
使用scons替代makefile(3)
2011-01-25 11:55 4822在上两篇文章中已经简单介绍了用scons编译库文件,可执行程序 ... -
C 支持动态添加测试数据的测试代码
2011-01-13 17:22 1121/下面的定义为了支持可扩增。 //当需要增加一个新的测试用列 ... -
Linux下Makefile的automake生成
2010-12-28 16:55 1103******************helloworld.c* ... -
SCons笔记(详细版)
2010-12-23 16:11 105431. 基本使用 SConstruct文件就功能而言相当于Ma ... -
scons 学习
2010-12-23 11:14 2184scons 学习 作者:Sam(甄峰) sam_code@h ... -
scons随笔
2010-12-22 20:20 4708scons随笔 Scons是新一代的软件构件工具,或者说ma ... -
Scons在linux下的安装和使用
2010-12-21 11:59 3287因为正在用的一个开源软件需要的Developm ... -
排列组合的实现
2010-12-20 12:41 1066简单算法: 从前往后(或者从后往前)每次交换一个位置。当存在 ...
相关推荐
在TinyXML入门教程中,你可能会学到以下关键概念: 1. **XML元素(Element)**:XML文档的基本组成单元,由标签、属性和内容构成。例如,`<book>`就是一个元素,可能包含属性(如`id="123"`)和内容(如`编程艺术...
`TinyXML入门教程.rar`可能包含了一系列示例程序,这些示例展示了如何使用TinyXML进行XML文档的加载、遍历、修改和保存。例如,如何创建一个新的XML文档,添加元素和属性,以及如何从已有的XML文件中提取数据。 4....
TinyXML2是一个轻量级的XML解析库,主要用于读取和写入XML文档。这个库在C++中设计,提供了一种简洁的方式来处理XML数据,适用于小型项目或嵌入式系统。在“TinyXML2使用示例”中,我们可以通过提供的源代码和XML...
总结一下,TinyXML教程主要涵盖了如何使用TinyXML库加载、创建、遍历和操作XML文档,同时提到了一些C++基础技巧,如类型转换。理解这些概念和技巧,对于在C++项目中有效地处理XML数据至关重要。通过实践这些示例,你...
TinyXML入门教程 1 什么是XML? 1 文档类 2 创建文档对象 3 输出文档对象 3 保存文档对象 4 返回第一个根元素 5 声明类 5 注释类 6 元素类 6 节点名 6 父节点 6 子节点 7 编辑子节点 7 同级节点 7 遍历元素 8 元素...
在这个"TinyXml2应用实例Visual Studio 2022"的教程中,我们将探讨如何在Microsoft的Visual Studio 2022集成开发环境中利用TinyXml2处理XML文件。 首先,我们需要了解XML(eXtensible Markup Language)的基本概念...
根据描述,“TinyXML PDF版本”可能是指将TinyXML的相关文档或教程以PDF格式发布,以便用户离线阅读和学习。这种形式对于想要深入了解TinyXML并希望随时查阅资料的学习者来说非常有用。 #### 四、TinyXML使用技巧及...
这里我们以TinyXML为例,因为它的API简单易用,适合初学者入门。 1. **安装TinyXML库** - 下载TinyXML源码包,解压后将其包含的头文件(如tinyxml.h、tinyxml.cpp)添加到你的C++项目中。 - 如果你使用的是VS2003...
<title>XML入门教程 <author>John Doe <year>2020 ``` 在这个例子中,`book`是根元素,`title`、`author`和`year`是子元素,`id`是`book`元素的属性。 ### C++ XML读取库 1. **TinyXML**: TinyXML是一个小型、...
1. **安装TinyXML库**: 首先,你需要下载并集成TinyXML库到你的项目中。TinyXML是一个轻量级的库,用于解析和生成XML文档,非常适用于C++项目。 2. **包含头文件**: 在你的源代码中,需要包含TinyXML的相关头文件:...
HGE是一个开源的C++游戏开发库,它为开发者提供了大量的基础功能,包括资源管理、音效处理、图形绘制、物理引擎接口等。它的设计目标是使游戏开发变得更加简单和高效,特别适合小型游戏或者初学者进行实践。HGE采用...
const char *xmlStr = "<book id='123'><title>XML入门教程</title><author>John Doe</author><year>2020</year></book>"; xmlDocPtr doc = xmlReadMemory(xmlStr, strlen(xmlStr), "", NULL, XML_PARSE_NOBLANKS)...
- **XML与C++结合**:使用库如pugixml或TinyXML处理XML文件,进行数据存储和交换。 5. **实战项目**: - **小程序开发**:通过编写简单的程序,如计算器、文本编辑器等,将理论知识付诸实践。 - **游戏编程**:...
在C++中解析XML,我们通常会使用第三方库,如TinyXML、pugixml或 RapidXML。这里以TinyXML为例,演示基本的解析步骤: 1. **包含头文件**:首先,你需要包含TinyXML库的头文件: ```cpp #include "tinyxml.h" ``` 2...