原文: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解析器,TinyXML-2具有以下特点: 1. 轻量级且易于集成:它体积小巧,代码简洁,易于集成到各种 C++ 项目中。 2. API简单易用:它提供了简单易用的 API,使得解析和操作 XML 数据变得简单快捷。开发者可以...
总的来说,TinyXML是一个功能强大且易于上手的XML解析器,适用于需要处理XML数据的C++项目。它提供的API简洁明了,使得XML文档的读写变得直观且高效。然而,对于大型复杂的XML文档,或者对性能有极高要求的应用,...
TinyXML2是一个小型、快速且易于使用的C++库,用于解析和生成XML文档。这个库的设计目标是简单、高效,并且适用于嵌入式系统。在本文中,我们将深入探讨如何使用TinyXML2来解析和创建XML文件,特别是涉及到CDATA区段...
TinyXML是一个开源、轻量级的C++库,专门用于解析和操作XML(eXtensible Markup Language)文件。XML是一种被广泛应用于数据交换、配置文件、文档存储等领域的标记语言。TinyXML的设计目标是简单易用,适用于嵌入式...
TinyXML 是一个轻量级的开源 XML 解析库,专为 C++ 设计,可以在 Windows 和 Linux 平台上编译。它提供了简单的 API,使得 XML 文档解析变得容易上手。TinyXML 将 XML 文件解析成内存中的 DOM(文档对象模型)结构,...
TinyXML 是一个专门为 C++ 开发的轻量级 XML 解析器,它的设计目标是简单易用,并且能够轻松地整合到其他项目中。TinyXML 实现了一个文档对象模型(DOM),通过解析 XML 文档,生成一个可以直接读取、修改和保存的...
TinyXml是一款轻量级的C++ XML解析器,它的设计目标是简单易用,适合小型项目或者嵌入式系统中处理XML数据。TinyXml库允许开发者直接在C++代码中读取、修改和写入XML文档,极大地简化了XML与C++程序之间的交互。 ...
TinyXML是C++编程语言中一个轻量级的开源库,专门用于解析XML(Extensible Markup Language)文档。XML是一种广泛用于数据交换和存储结构化数据的语言,它以标记符的形式组织数据,易于人类阅读和机器处理。TinyXML...
它由李·格雷戈里(Lee Gregory)开发,旨在提供一个轻量级的解决方案,适用于那些需要处理XML数据但不希望引入大型XML解析器如Xerces或LibXML的项目。TinyXML2是对TinyXML的更新版本,修复了一些已知问题并提供了更...
一款轻量级的XML解析器,能够容易的解决中文问题 如果你要做的东西不是非常大的项目的话,比较...rar压缩包中包含了TinyXML解析器配套的文档,支持C、c++的轻量级的XML文档解析器,支持中文,非常适合不太大的项目
**tinyXML XML解析器** tinyXML是一款开源的、轻量级的XML解析库,它为C++程序员提供了处理XML文档的能力。XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和软件序列化...
总结来说,"基于tinyxml2的xml操作库再封装"项目为C++开发者提供了一个高效、易用的XML处理工具,通过优化和扩展tinyxml2的功能,使得XML数据的处理变得更加直观和便捷。这将极大地提高开发效率,降低开发成本,尤其...
3. **元素(Element)**:在TinyXML中,每个XML元素对应一个`TiXmlElement`对象。元素有名称、属性和子元素。通过`FirstChildElement()`和`NextSiblingElement()`等方法,可以遍历元素的子元素。 4. **属性...
TinyXML 是一个小型、开源的 C++ 库,专门用于解析和生成 XML(eXtensible Markup Language)文档。在本文中,我们将深入探讨如何使用 TinyXML 来读写 XML 文件,以及它在 Visual C++ 开发环境中的应用。 1. **Tiny...
TinyXML库是C++中一个轻量级的XML解析器,设计用于简化XML文档的读取和写入操作。XML(eXtensible Markup Language)是一种广泛应用的数据交换格式,广泛用于配置文件、数据存储和网络通信等领域。TinyXML库以其小巧...
XML(eXtensible Markup Language)是一种用于存储和...总的来说,TinyXML是XML解析的一个实用工具,适用于那些需要在有限资源环境下处理XML的项目。通过理解和熟练使用TinyXML,开发者可以高效地在程序中处理XML数据。
TinyXML是C++编程语言中一个轻量级的XML解析库,它允许程序员方便地读取、写入和操作XML文档。TinyXML以其小巧、高效和易于使用的特点,在许多小型项目和嵌入式系统中得到广泛应用。以下是关于TinyXML的一些核心知识...
Tinyxml 是一个开源的、轻量级的XML解析库,主要设计用于C++语言环境,包括iOS平台。在iOS开发中,XML(eXtensible Markup Language)是一种常见的数据交换格式,广泛应用于网络服务和配置文件。Tinyxml库提供了一个...