`
zuroc
  • 浏览: 1307444 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

[大部分转载]TinyXml笔记

    博客分类:
  • C++
阅读更多

用mingw32-make前修改一下makefile文件,改为如下

# DEBUG can be set to YES to include debugging info, or NO otherwise(不是DEBUG)
DEBUG          := NO

# PROFILE can be set to YES to include profiling info, or NO otherwise
PROFILE        := NO

# TINYXML_USE_STL can be used to turn on STL support. NO, then STL
# will not be used. YES will include the STL files.(使用STL,选择的话,则可以使用std::string)
TINYXML_USE_STL := YES

另外可以tinyxml_guide.zip可以下载.

以下转载:

TinyXml学习笔记

张弛

一、      TinyXml的特点

TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器。

1.      SAX和DOM

目前XML的解析主要有两大模型:SAX和DOM。

其中SAX是基于事件的,其基本工作流程是分析XML文档,当发现了一个新的元素时,产生一个对应事件,并调用相应的用户处理函数。这种方式占用内存少,速度快,但用户程序相应得会比较复杂。

而DOM(文档对象模型),则是在分析时,一次性的将整个XML文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,速度往往慢于SAX,但可以给用户提供一个面向对象的访问接口,对用户更为友好。

2.      验证和非验证

对于一个特定的XML文档而言,其正确性分为两个层次。首先是其格式应该符合XML的基本格式要求,比如第一行要有声明,标签的嵌套层次必须前后一致等等,符合这些要求的文件,就是一个合格的XML文件,称作well-formatted。但除此之外,一个XML文档因其内容的不同还必须在语义上符合相应的标准,这些标准由相应的DTD文件或者Schema文件来定义,符合了这些定义要求的XML文件,称作valid。

因此,解析器也分为两种,一种是验证的,即会跟据XML文件中的声明,用相应的DTD文件对XML文件进行校验,检查它是否满足DTD文件的要求。另一种是忽略DTD文件,只要基本格式正确,就可以进行解析。

就我所知,验证的解析器通常都是比较重量级的。TinyXml不支持验证,但是体积很小,用在解析格式较为简单的XML文件,比如配置文件时,特别的合适。

二、 TinyXml的构建和使用
1.      获取

TinyXml首页在http://www.grinninglizard.com/tinyxml/index.html,从这里可以找到最新版本的源代码,目前的版本是2.3.4。

2.构建

TinyXml在构建时可以选择是否支持STL,选择的话,则可以使用std::string,所以通常应该打开这个选项。

在Windows上,TinyXml的源码包里提供了VC6的工程文件,直接用它就可以生成两个静态库(带STL和不带STL),非常容易。唯一需要注意的是,默认生成的库是单线程的,如果用在多线程的项目中,需要改动一下配置,生成相应的多线程库。

在Unix平台上,TinyXml的源码包里只提供了一个Makefile,对于典型的Linux系统,或装了gcc和gmake的其他Unix,这个Makefile足够用了,我在RH9和RHEL4上测试,简单的make就成功了。需要注意的有以下几点:默认的编译是不支持STL的,可以通过编辑Makefile的TINYXML_USE_STL := NO那一行,把NO改成YES就可以支持STL了;还有默认只生成了一个测试程序,没有生成任何库,如果要生成静态库的话,可以用ar命令,将生成的几个目标文件打包就行了,如果要生成动态库,则需要加上-fpic参数重新编译。

3.      使用

构建了相应的库之后,在使用了它们的工程中,只要在连接时把他们连上就行了。需要注意的是,如果需要STL支持,在编译用到了TinyXml的文件时,需要定义一个宏TIXML_USE_STL,对gcc,可以使用参数-DTIXML_USE_STL,对cl.exe(VC),可以使用参数/DTIXML_USE_STL,如果嫌麻烦,可以直接定义在 tinyxml.h文件里。

三、 TinyXml的编程模型1.      类之间的关系

TinyXml实现的时DOM访问模型,因此提供了一系列的类对应XML文件中的各个节点。主要类间的关系如下图所示:

TiXmlBase:其他类的基类,是个抽象类

TiXmlNode:表示一个节点,包含节点的一般方法,如访问自节点、兄弟节点、编辑自身、编辑子节电

TiXmlDocument:表示整个XML文档,不对应其中某个特定的节点。

TiXmlElement:表示元素节点,可以包含子节点和TiXmlAttribute

TiXmlComment:表示注释

TiXmlDeclaration:表示声明

TiXmlText:表示文本节点

TiXmlUnknown:表示未知节点,通常是出错了

TiXmlAttribute:表示一个元素的属性

下面是一个简单的例子:

<!---->

<book> </book>

       <name>TinyXml How To</name>

       <price unit="”RMB”">20</price>

       <description>Some words…</description>

<!---->

整个文档,对应TiXmlDocument

book,name,price, description,都对应TiXmlElement

第一行对应一个TiXmlDeclaration

第二行对应一个TiXmlComment

“TinyXml How To”对应一个TiXmlText

unit则是price的一个TiXmlAttribute

这些类与XML文件中的相应元素都有很好的对应关系,因此相信参照TinyXml的文档,可以很容易的掌握各个方法的使用。

2.  需要注意的问题

各类之间的转换

由于各个节点类都从TiXmlNode继承,在使用时常常需要将TiXmlNode*类型的指针转换为其派生类的指针,在进行这种转换时,应该首先使用由TiXmlNode类提供的一系列转换函数,如ToElement(void),而不是c++的dynamic_cast

检查返回值

由于TinyXml是一个非校验的解析器,因此当解析一个文件时,很可能文件并不包含我们预期的某个节点,在这种情况下,TinyXml将返回空指针。因此,必须要对返回值进行检查,否则将很容易出现内存访问的错误。

如何重头建立一个XML文件

先建立一个TiXmlDocument对象,然后,载入某个模板,或者直接插入一个节点作为根节点,接着就可以像打开一个已有的XML文件那样对它进行操作了。

四、总结

TinyXml最大的特点就是它很小,可以很方便的静态连接到程序里。对于像配置文件、简单的数据文件这类文件的解析,它很适合。但是由于它是非验证的,因此需要在程序里做许多检查工做,加重了程序编写的负担。因此对于复杂的XML文件,我觉得最好还是用验证的解析器来处理。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=477335

 
分享到:
评论

相关推荐

    tinyxml与tinyxml2

    TinyXML和TinyXML2是两个小型的开源库,专门用于解析和操作XML(eXtensible Markup Language)文档。这两个库都是用C++编写的,为C++开发者提供了方便的接口来读取、写入和操作XML数据。下面将详细介绍这两个库的...

    tinyxml2.h tinyxml2.cpp文件

    TinyXML-2,通常以tinyxml2库的形式存在,是一个轻量级的C++库,专门用于解析和操作XML文档。这个库由李·斯坦普(Lee Stemp)开发,设计简洁,易于集成到各种项目中,特别是对于嵌入式系统和资源有限的环境。在给定...

    TinyXml使用笔记

    这篇“TinyXml使用笔记”将深入探讨如何利用这个库进行XML操作。 首先,TinyXml库包含几个核心类,它们是`TiXmlDocument`、`TiXmlElement`、`TiXmlAttribute`、`TiXmlText`、`TiXmlComment`、`TiXmlDeclaration`...

    tinyxml2 version 9.0.0下载地址

    TinyXML2是一个小型、快速且易于使用的XML解析库,主要用于C++编程。版本9.0.0是该库的一个更新版本,提供了最新的功能和错误修复。在这个版本中,开发者可以期待更加稳定和优化的XML处理性能。 TinyXML2的设计目标...

    QT使用TinyXML开源库解析XML文件

    1. **下载和解压TinyXML**:从TinyXML的官方网站或者其他可靠的源下载最新版本的TinyXML库,解压缩后得到头文件(如tinyxml.h)和源文件(如tinyxml.cpp)。 2. **添加TinyXML到QT项目**:将这些文件复制到你的QT...

    tinyxml2最新版本(来自github)

    TinyXML2是一个轻量级的XML解析库,主要用于读取和写入XML文档。这个库由Steve Baker开发,它的最新版本在2017年8月17日更新,这表明了开发者持续对库进行维护和改进以适应不断变化的编程需求。在本文中,我们将深入...

    TinyXML2使用示例

    TinyXML2是一个轻量级的XML解析库,主要用于读取和写入XML文档。这个库在C++中设计,提供了一种简洁的方式来处理XML数据,适用于小型项目或嵌入式系统。在“TinyXML2使用示例”中,我们可以通过提供的源代码和XML...

    tinyxml+tinyxpath+tinyxml++最新套件(20080916)

    TinyXML、TinyXPath和TinyXML++是开源的C++库,专门用于解析和操作XML文档。这些库在处理XML数据时提供了轻量级且高效的选择,尤其适合嵌入式系统和资源有限的环境。 TinyXML,版本2.5.3,是一个小型、简单且易于...

    tinyxml2源码及示例

    TinyXML2是一个轻量级的XML解析库,主要由C++编写,旨在提供简单、高效的方式来读取和写入XML文档。它适用于各种平台,包括桌面系统和移动系统,如Android。这个库的设计目标是小巧且易于理解,使得开发者能够快速地...

    tinyxml2解析和创建xml样例

    TinyXML2是一个小型、快速且易于使用的C++库,用于解析和生成XML文档。这个库的设计目标是简单、高效,并且适用于嵌入式系统。在本文中,我们将深入探讨如何使用TinyXML2来解析和创建XML文件,特别是涉及到CDATA区段...

    使用tinyxml 读写xml文件方法

    TinyXML 提供了一系列类来表示 XML 文档的不同部分,如 `TiXmlDocument`(XML 文档)、`TiXmlElement`(元素)、`TiXmlAttribute`(属性)、`TiXmlText`(文本)和 `TiXmlComment`(注释)。这些类使我们能够轻松地...

    TinyXML入门教程

    ### TinyXML入门教程知识点详解 #### 一、XML简介与TinyXML概述 - **XML**:全称为**可扩展标记语言**(EXtensible Markup Language),是一种用于标记数据的语言,允许用户自定义数据的标识,从而区分不同类型的结构...

    C++ XML文件解析库 tinyxml2

    **C++ XML文件解析库 TinyXML2** XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于网络服务、配置文件、数据交换、对象序列化等领域。TinyXML2是一个轻量级、高效的C++库,专为解析和操作...

    XML解析工具- TinyXML2 -源代码 - C++

    TinyXML-2 是一个简单、小型、高效的 C++ XML 解析器,可以被轻松集成到其他程序中。它使用文档对象模型(DOM)的方式解析XML,可解析 XML 文档,并根据该文档构建可读取、修改和保存的文档对象模型。 作为XML解析...

    基于tinyxml2的xml操作库再封装

    TinyXML2是轻量级的C++ XML解析库,它提供了简单、直接的方式来读写XML文档。本项目是基于tinyxml2进行的二次封装,旨在进一步简化XML的操作,提供更友好的API,提升开发效率。 在C++中,原始的tinyxml2库可能需要...

    mfc 利用TinyXml 读取数据操作

    在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)框架下,使用TinyXml库来处理XML文件,实现数据的增加、修改和删除操作。TinyXml是一个小巧且易于使用的C++库,它允许程序员方便地解析和生成XML...

    tinyxml_libtinyxml的缺点_test_tinyxml_keptj4v_解析xml_

    TinyXML是一个开源库,用于解析和操作XML(可扩展标记语言)文档。它以其小巧、轻量级和易于使用而闻名,适用于各种嵌入式和桌面应用。然而,尽管TinyXML在许多项目中表现出色,但它也有一些显著的缺点,这些缺点在...

    tinyxml2-master.zip解析xml的c++库

    tinyxml2库解析xml用是c++的 使用轻快方便只需要库中的tinyxml2.cpp和tinyxml2.h放到开发路径下即可使用,如果编译报错fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory,请下载FFmpeg-...

    TinyXML2简单使用例程

    TinyXML2库简化了这一过程,提供了一系列C++接口来操作XML文档的各个组成部分,如元素、属性、文本和注释。 下面我们将详细讲解 TinyXML2 的关键功能及如何通过示例代码实现它们: 1. **解析XML文档**: TinyXML2...

    tinyxml.zip

    这个压缩包“tinyxml.zip”包含了TinyXML库的源代码以及一个自定义的接口实现,允许开发者更方便地集成和使用TinyXML库。 TinyXML的核心功能包括: 1. **XML解析**:TinyXML能够读取XML文件或XML字符串,并将其...

Global site tag (gtag.js) - Google Analytics