`
aigo
  • 浏览: 2679887 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

TinyXML:一个优秀的C++ XML解析器

阅读更多

原文:http://www.cnblogs.com/phinecos/archive/2008/03/11/1100912.html

 

读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。

 

TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

 

DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。

如下是一个XML片段:

<Persons>
	<Person ID="1">
		<name>周星星</name>
		<age>20</age>
	</Person>
	<Person ID="2">
		<name>白晶晶</name>
		<age>18</age>
	</Person>
</Persons>

 

 

 

 在TinyXML中,根据XML的各种元素来定义了一些类:

 

TiXmlBase:整个TinyXML模型的基类。

 

TiXmlAttribute:对应于XML中的元素的属性。

 

TiXmlNode:对应于DOM结构中的节点。

 

TiXmlComment:对应于XML中的注释

 

TiXmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?>。

 

TiXmlDocument:对应于XML的整个文档。

 

TiXmlElement:对应于XML的元素。

 

TiXmlText:对应于XML的文字部分

 

TiXmlUnknown:对应于XML的未知部分。 

 

TiXmlHandler:定义了针对XML的一些操作。

 

TinyXML是个解析库,主要由DOM模型类(TiXmlBase、TiXmlNode、TiXmlAttribute、TiXmlComment、TiXmlDeclaration、TiXmlElement、TiXmlText、TiXmlUnknown)和操作类(TiXmlHandler)构成。它由两个头文件(.h文件)和四个CPP文件(.cpp文件)构成,用的时候,只要将(tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)导入工程就可以用它的东西了。如果需要,可以将它做成自己的DLL来调用。举个例子就可以说明一切。。。

对应的XML文件:

<Persons>
    <Person ID="1">
        <name>phinecos</name>
        <age>22</age>
    </Person>
</Persons>

 

读写XML文件的程序代码:

#include <iostream>
#include "tinyxml.h"
#include "tinystr.h"
#include <string>
#include <windows.h>
#include <atlstr.h>
using namespace std;

CString GetAppPath()
{//获取应用程序根目录
    TCHAR modulePath[MAX_PATH];
    GetModuleFileName(NULL, modulePath, MAX_PATH);
    CString strModulePath(modulePath);
    strModulePath = strModulePath.Left(strModulePath.ReverseFind(_T('\\')));
    return strModulePath;
}

bool CreateXmlFile(string& szFileName)
{//创建xml文件,szFilePath为文件保存的路径,若创建成功返回true,否则false
    try
    {
        //创建一个XML的文档对象。
        TiXmlDocument *myDocument = new TiXmlDocument();
        //创建一个根元素并连接。
        TiXmlElement *RootElement = new TiXmlElement("Persons");
        myDocument->LinkEndChild(RootElement);
        //创建一个Person元素并连接。
        TiXmlElement *PersonElement = new TiXmlElement("Person");
        RootElement->LinkEndChild(PersonElement);
        //设置Person元素的属性。
        PersonElement->SetAttribute("ID", "1");
        //创建name元素、age元素并连接。
        TiXmlElement *NameElement = new TiXmlElement("name");
        TiXmlElement *AgeElement = new TiXmlElement("age");
        PersonElement->LinkEndChild(NameElement);
        PersonElement->LinkEndChild(AgeElement);
        //设置name元素和age元素的内容并连接。
        TiXmlText *NameContent = new TiXmlText("周星星");
        TiXmlText *AgeContent = new TiXmlText("22");
        NameElement->LinkEndChild(NameContent);
        AgeElement->LinkEndChild(AgeContent);
        CString appPath = GetAppPath();
        string seperator = "\\";
        string fullPath = appPath.GetBuffer(0) +seperator+szFileName;
        myDocument->SaveFile(fullPath.c_str());//保存到文件
    }
    catch (string& e)
    {
        return false;
    }
    return true;
}

bool ReadXmlFile(string& szFileName)
{//读取Xml文件,并遍历
    try
    {
        CString appPath = GetAppPath();
        string seperator = "\\";
        string fullPath = appPath.GetBuffer(0) +seperator+szFileName;
        //创建一个XML的文档对象。
        TiXmlDocument *myDocument = new TiXmlDocument(fullPath.c_str());
        myDocument->LoadFile();
        //获得根元素,即Persons。
        TiXmlElement *RootElement = myDocument->RootElement();
        //输出根元素名称,即输出Persons。
        cout << RootElement->Value() << endl;
        //获得第一个Person节点。
        TiXmlElement *FirstPerson = RootElement->FirstChildElement();
        //获得第一个Person的name节点和age节点和ID属性。
        TiXmlElement *NameElement = FirstPerson->FirstChildElement();
        TiXmlElement *AgeElement = NameElement->NextSiblingElement();
        TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute();
        //输出第一个Person的name内容,即周星星;age内容,即;ID属性,即。
        cout << NameElement->FirstChild()->Value() << endl;
        cout << AgeElement->FirstChild()->Value() << endl;
        cout << IDAttribute->Value()<< endl;
    }
    catch (string& e)
    {
        return false;
    }
    return true;
}
int main()
{
    string fileName = "info.xml";
    CreateXmlFile(fileName);
    ReadXmlFile(fileName);
}

 

分享到:
评论

相关推荐

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

    作为XML解析器,TinyXML-2具有以下特点: 1. 轻量级且易于集成:它体积小巧,代码简洁,易于集成到各种 C++ 项目中。 2. API简单易用:它提供了简单易用的 API,使得解析和操作 XML 数据变得简单快捷。开发者可以...

    TinyXML:基于DOM的XML解析器

    总的来说,TinyXML是一个功能强大且易于上手的XML解析器,适用于需要处理XML数据的C++项目。它提供的API简洁明了,使得XML文档的读写变得直观且高效。然而,对于大型复杂的XML文档,或者对性能有极高要求的应用,...

    tinyxml2解析和创建xml样例

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

    tinyXMl解析XMl文件

    TinyXML是一个开源、轻量级的C++库,专门用于解析和操作XML(eXtensible Markup Language)文件。XML是一种被广泛应用于数据交换、配置文件、文档存储等领域的标记语言。TinyXML的设计目标是简单易用,适用于嵌入式...

    C++ XML 解析之 TinyXML

    TinyXML 是一个轻量级的开源 XML 解析库,专为 C++ 设计,可以在 Windows 和 Linux 平台上编译。它提供了简单的 API,使得 XML 文档解析变得容易上手。TinyXML 将 XML 文件解析成内存中的 DOM(文档对象模型)结构,...

    tinyXML C++ 解析器

    TinyXML 是一个专门为 C++ 开发的轻量级 XML 解析器,它的设计目标是简单易用,并且能够轻松地整合到其他项目中。TinyXML 实现了一个文档对象模型(DOM),通过解析 XML 文档,生成一个可以直接读取、修改和保存的...

    c++ xml解析器TinyXml

    TinyXml是一款轻量级的C++ XML解析器,它的设计目标是简单易用,适合小型项目或者嵌入式系统中处理XML数据。TinyXml库允许开发者直接在C++代码中读取、修改和写入XML文档,极大地简化了XML与C++程序之间的交互。 ...

    基于c++ 的XML解析 开源包 tinyxml

    TinyXML是C++编程语言中一个轻量级的开源库,专门用于解析XML(Extensible Markup Language)文档。XML是一种广泛用于数据交换和存储结构化数据的语言,它以标记符的形式组织数据,易于人类阅读和机器处理。TinyXML...

    tinyxml2第三方Xml解析库

    它由李·格雷戈里(Lee Gregory)开发,旨在提供一个轻量级的解决方案,适用于那些需要处理XML数据但不希望引入大型XML解析器如Xerces或LibXML的项目。TinyXML2是对TinyXML的更新版本,修复了一些已知问题并提供了更...

    TinyXML_v2.5.3(支持C/C++的轻量级XML文档解析器)(含解析器源码和文档)

    一款轻量级的XML解析器,能够容易的解决中文问题 如果你要做的东西不是非常大的项目的话,比较...rar压缩包中包含了TinyXML解析器配套的文档,支持C、c++的轻量级的XML文档解析器,支持中文,非常适合不太大的项目

    tinyxml XML解析器

    **tinyXML XML解析器** tinyXML是一款开源的、轻量级的XML解析库,它为C++程序员提供了处理XML文档的能力。XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和软件序列化...

    基于tinyxml2的xml操作库再封装

    总结来说,"基于tinyxml2的xml操作库再封装"项目为C++开发者提供了一个高效、易用的XML处理工具,通过优化和扩展tinyxml2的功能,使得XML数据的处理变得更加直观和便捷。这将极大地提高开发效率,降低开发成本,尤其...

    tinyXML c++实现的xml解析器

    3. **元素(Element)**:在TinyXML中,每个XML元素对应一个`TiXmlElement`对象。元素有名称、属性和子元素。通过`FirstChildElement()`和`NextSiblingElement()`等方法,可以遍历元素的子元素。 4. **属性...

    使用tinyxml 读写xml文件方法

    TinyXML 是一个小型、开源的 C++ 库,专门用于解析和生成 XML(eXtensible Markup Language)文档。在本文中,我们将深入探讨如何使用 TinyXML 来读写 XML 文件,以及它在 Visual C++ 开发环境中的应用。 1. **Tiny...

    C++ TinyXML库 XML解析读写

    TinyXML库是C++中一个轻量级的XML解析器,设计用于简化XML文档的读取和写入操作。XML(eXtensible Markup Language)是一种广泛应用的数据交换格式,广泛用于配置文件、数据存储和网络通信等领域。TinyXML库以其小巧...

    tinyxml_2_1_5.tar.gz_XML解析_tinyxml 下载_xml XML_xml 解析器_xml解析器

    XML(eXtensible Markup Language)是一种用于存储和...总的来说,TinyXML是XML解析的一个实用工具,适用于那些需要在有限资源环境下处理XML的项目。通过理解和熟练使用TinyXML,开发者可以高效地在程序中处理XML数据。

    tinyxml(c++的XML解析器)

    TinyXML是C++编程语言中一个轻量级的XML解析库,它允许程序员方便地读取、写入和操作XML文档。TinyXML以其小巧、高效和易于使用的特点,在许多小型项目和嵌入式系统中得到广泛应用。以下是关于TinyXML的一些核心知识...

    Tinyxml iOS xml 解析

    Tinyxml 是一个开源的、轻量级的XML解析库,主要设计用于C++语言环境,包括iOS平台。在iOS开发中,XML(eXtensible Markup Language)是一种常见的数据交换格式,广泛应用于网络服务和配置文件。Tinyxml库提供了一个...

Global site tag (gtag.js) - Google Analytics