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

使用tinyxml类解析XML

阅读更多

读取和设置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);
}

分享到:
评论

相关推荐

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

    qDebug() &lt;&lt; "TinyXML解析失败:" ; file.close(); return; } TiXmlElement* rootElement = xmlDoc.RootElement(); if (rootElement == nullptr) { qDebug() &lt;&lt; "XML文件没有根元素:" ; file.close(); ...

    tinyxml2解析XML文件读取数据

    本项目“tinyxml2解析XML文件读取数据”主要关注如何使用tinyxml2库来高效地解析XML文件并提取其中的数据。以下将详细介绍tinyxml2库的关键功能和使用方法。 1. **tinyxml2库介绍** - tinyxml2提供了DOM(Document...

    Tinyxml文件解析经典例子

    TinyXML 的优点是使用起来比较简单,很容易上手,本文给出一个使用 TinyXML 进行 XML 解析的简单例子,很多复杂的应用都可以基于本例子的方法来完成。 例如,我们可以使用 TinyXML 来解析 Students.xml 文件,该...

    C++ XML文件解析库 tinyxml2

    1. **XML解析**:TinyXML2通过`XMLDocument`类来表示整个XML文档,你可以使用`LoadFile()`或`Parse()`方法加载XML文件或内存中的XML字符串。解析完成后,文档的结构被映射为一系列的节点,包括元素(XMLElement)、...

    tinyxml2解析和创建xml样例

    以上就是使用TinyXML2进行XML解析和创建的基本步骤。在实际应用中,你可能需要处理错误、验证元素和属性,或者使用更复杂的查询和操作。TinyXML2库提供了丰富的API,使得这些任务变得容易。在`tinyxml2Demo`项目中,...

    tinyxml与tinyxml2

    如果对C++11特性支持不是必需的,且更倾向于使用已有的TinyXML代码,那么TinyXML也可以满足基本需求。 在使用这些库时,记得包含相应的头文件,如`tinyxml.h`和`tinyxml2.h`,并链接相应的库。同时,由于它们都是...

    Tinyxml解析源码

    总的来说, TinyXML是一个强大且实用的XML解析库,尽管它小巧,但功能齐全,足以处理大多数XML解析任务。通过深入研究源码,不仅可以学习XML解析的基本原理,还能了解如何在特定环境下优化代码,提升系统性能。

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

    它使用文档对象模型(DOM)的方式解析XML,可解析 XML 文档,并根据该文档构建可读取、修改和保存的文档对象模型。 作为XML解析器,TinyXML-2具有以下特点: 1. 轻量级且易于集成:它体积小巧,代码简洁,易于集成...

    C++ 使用TinyXML解析XML文件 源码

    TinyXML库设计简洁,易于使用,使得开发者能够快速地解析XML文档并从中提取数据,或者创建新的XML文档。它提供了一套API接口,允许程序员通过DOM(Document Object Model)方式来操作XML文档。DOM是一种将XML文档...

    XML解析类(TinyXml)

    使用TinyXml解析XML的基本流程如下: 1. 创建一个`TiXmlDocument`对象,并加载XML文件。 2. 使用`LoadFile()`或`Parse()`方法解析XML内容。 3. 如果解析成功,可以通过`FirstChildElement()`、`NextSiblingElement...

    使用tinyxml 读写xml文件方法

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

    tinyxml2解析xml

    下面我们将详细讨论如何使用TinyXML2来解析XML配置文件。 一、TinyXML2的基本结构与概念 XML(eXtensible Markup Language)是一种标记语言,常用于存储和传输数据。TinyXML2则提供了一个C++接口来处理XML文档。在...

    tinyxml XML解析器

    使用tinyXML解析XML - **加载XML文档**: 通过`TiXmlDocument`类的`LoadFile()`函数,可以将XML文件加载到内存中,例如: ```cpp TiXmlDocument doc("example.xml"); if (!doc.LoadFile()) { // 处理加载失败 } ``...

    tinyxml解析xml文件

    TinyXML库的使用,可以让你在C++程序中方便地解析XML文档的结构,提取其中的数据,甚至修改和创建新的XML文档。 TinyXML库的主要组成部分包括以下几个类: 1. **TiXmlDocument**: 这是处理整个XML文档的类。你可以...

    tinyXMl解析XMl文件

    1. **TiXMLDocument**: 这是TinyXML的核心类,代表一个XML文档。你可以通过这个类加载XML文件,或者创建一个新的XML结构并保存为文件。 2. **TiXmlElement**: 表示XML文档中的元素节点。元素是XML文档的主要构建块...

    tinyxml2.h tinyxml2.cpp文件

    `tinyxml2.h`是头文件,包含了TinyXML-2的所有公共接口和类定义。在这个文件中,你可以找到如下的关键知识点: 1. **XMLDocument**: 这是TinyXML-2的核心类,代表一个XML文档。你可以使用它来加载XML文件、创建新的...

    TinyXML2使用示例

    总之,“TinyXML2使用示例”提供了学习和实践XML解析的实例,通过分析`test_tinyxml2.cpp`的代码,我们可以深入理解TinyXML2库的工作原理,并学会如何在实际项目中应用XML配置文件。同时,对于`CXMLCfg`类的设计和...

    TinyXML解析库

    TinyXML是个解析库,主要由DOM模型类(TiXmlBase、TiXmlNode、TiXmlAttribute、TiXmlComment、TiXmlDeclaration、TiXmlElement、TiXmlText、TiXmlUnknown)和操作类(TiXmlHandler)构成。它由两个头文件(.h文件)...

    tinyxml_libtinyxml的缺点_test_tinyxml_keptj4v_解析xml_

    使用TinyXML解析XML: 以下是一般步骤: 1. 引入库:首先,在项目中包含TinyXML的头文件,例如`tinyxml.h`。 2. 加载XML文档:使用`TiXmlDocument`类加载XML文件到内存,例如`TiXmlDocument doc("example.xml");`。 ...

    Tinyxml iOS xml 解析

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

Global site tag (gtag.js) - Google Analytics