- 浏览: 106677 次
- 性别:
- 来自: 上海
最新评论
-
marx:
marx 写道make: *** No targets spe ...
php 性能分析工具xhprof使用手册 -
marx:
make: *** No targets specified ...
php 性能分析工具xhprof使用手册
前言
TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手。
这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。
DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。
TinyXML介绍
在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的一些操作。
下载和编译
本文运行环境是: Redhat 5.5 + g++version 4.6.1 + GNU Make 3.81 + tinyxml_2_6_2
下载地址是:http://sourceforge.net/projects/tinyxml/
解压之后得到文件夹tinyxml,tinyxml的头文件和cpp文件,都在这个文件夹,为了我们的管理我们的项目工程,我们还是把tinyxml做一个整理。
由于tinyxml不仅支持Linux编译,同时也支持windows下编译,所以解压之后不仅有h文件,cpp文件,还有vc工程的一些工程文件,这里我们只在Linux上使用,所以只留下h文件和cpp文件,其他文件一概删除
这里我列出整理后的工作目录:
tinyxml/ // 工作目录 |-- include // 头文件根目录 | |-- tinyxml // tinyxml头文件,包括tinystr.h tinyxml.h |-- src // cpp源码文件根目录 |-- tinyxml // tinyxml源码文件夹,包括tinystr.cpp tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp |-- main.cpp // 我们的主函数,调用tinyxml的示例代码 |-- conf // 我们示例中用的xml文件所在的文件夹 |-- makefile // makefile,不用我们多说了吧,不懂请看我博客的makefile最佳实践
最简单的例子
我们在conf目录下建立student.xml,xml代码如下:
<School name=" 软件学院 " > <Class name = " C++ " > <Student name=" tinyxml " number=" 123 " > <email>tinyxml@163 .com</email> <address>中国</address> </Student> <Student name=" jsoncpp " number=" 456 " > <email>jsoncpp@gmail.com</email> <address>美国</address> </Student> </Class> </School>
使用tinyxml,我们只需要在头文件中包含 <tinyxml.h>就行了。
打印整个XML代码如下:
void printSchoolXml() { using namespace std; TiXmlDocument doc; const char * xmlFile = " conf/school.xml " ; if (doc.LoadFile(xmlFile)) { doc.Print(); } else { cout << " can not parse xml conf/school.xml " << endl; } }
读取XML
代码如下:
void readSchoolXml() { using namespace std; const char * xmlFile = " conf/school.xml " ; TiXmlDocument doc; if (doc.LoadFile(xmlFile)) { doc.Print(); } else { cout << " can not parse xml conf/school.xml " << endl; return ; } TiXmlElement* rootElement = doc.RootElement(); // School元素 TiXmlElement* classElement = rootElement->FirstChildElement(); // Class元素 TiXmlElement* studentElement = classElement->FirstChildElement(); // Students for (; studentElement != NULL; studentElement = studentElement->NextSiblingElement() ) { TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute(); // 获得student的name属性 for (;attributeOfStudent != NULL; attributeOfStudent = attributeOfStudent->Next() ) { cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << std::endl; } TiXmlElement* studentContactElement = studentElement->FirstChildElement();// 获得student的第一个联系方式 for (; studentContactElement != NULL; studentContactElement = studentContactElement->NextSiblingElement() ) { string contactType = studentContactElement->Value(); string contactValue = studentContactElement->GetText(); cout << contactType << " : " << contactValue << std::endl; } } }
写入xml
这里我们将通过xml写入代码操作,写入几乎和conf/school.xml同样内容到conf/school-write.xml,代码如下:
void writeSchoolXml() { using namespace std; const char * xmlFile = " conf/school-write.xml " ; TiXmlDocument doc; TiXmlDeclaration * decl = new TiXmlDeclaration(" 1.0 " , "" , "" ); TiXmlElement * schoolElement = new TiXmlElement( " School " ); TiXmlElement * classElement = new TiXmlElement( " Class " ); classElement->SetAttribute(" name " , " C++ " ); TiXmlElement * stu1Element = new TiXmlElement(" Student " ); stu1Element->SetAttribute(" name " , " tinyxml " ); stu1Element->SetAttribute(" number " , " 123 " ); TiXmlElement * stu1EmailElement = new TiXmlElement(" email " ); stu1EmailElement->LinkEndChild(new TiXmlText(" tinyxml@163.com " ) ); TiXmlElement * stu1AddressElement = new TiXmlElement(" address " ); stu1AddressElement->LinkEndChild(new TiXmlText(" 中国 " )); stu1Element->LinkEndChild(stu1EmailElement); stu1Element->LinkEndChild(stu1AddressElement); TiXmlElement * stu2Element = new TiXmlElement(" Student " ); stu2Element->SetAttribute(" name " , " jsoncpp " ); stu2Element->SetAttribute(" number " , " 456 " ); TiXmlElement * stu2EmailElement = new TiXmlElement(" email " ); stu2EmailElement->LinkEndChild(new TiXmlText(" jsoncpp@163.com " )); TiXmlElement * stu2AddressElement = new TiXmlElement(" address " ); stu2AddressElement->LinkEndChild(new TiXmlText(" 美国 " )); stu2Element->LinkEndChild(stu2EmailElement); stu2Element->LinkEndChild(stu2AddressElement); classElement->LinkEndChild(stu1Element); classElement->LinkEndChild(stu2Element); schoolElement->LinkEndChild(classElement); doc.LinkEndChild(decl); doc.LinkEndChild(schoolElement); doc.SaveFile(xmlFile); }
下载工程
下载之后的编译和运行步骤
unzip tinyxml.zip cd tinyxml make ./main
更多操作
请参考 http://www.grinninglizard.com/tinyxmldocs/tutorial0.html
发表评论
-
Discuz插件编写教程
2013-10-21 15:23 2156Discuz插件编写教程: 1, ... -
Android
2012-12-25 13:48 9511. 请描述下 Activity ... -
c++ socket 消息构建
2012-10-10 11:14 954客户端 : /* client.c 向 ... -
linux 消息队列 实例
2012-09-25 11:42 1111前言: 消息队列就是一个消息的链表。可以把消息 ... -
Makefile上手教程(转载)
2012-09-25 10:46 1178译者自述: 最开始接触开源软件时,觉得make很神秘,打 ... -
Linux 信号signal处理机制
2012-09-24 15:55 924信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的 ... -
linux下C与C++混合编程
2012-09-21 10:36 1741首先,混合编程不是指在同一个文件里写C与C++。 比如说想 ... -
Linux 下编译C程序
2012-09-20 11:58 3173GCC 已不再是主要针对GNU项目自身的软件的小型 C ... -
VS2010快捷键
2012-09-10 15:30 821VS2010快捷键 有人发了VS2 ... -
mysql 备份
2011-06-10 16:15 4701,直接将MySQL数据库压缩备份,不能在mysql模式下使用 ... -
Apache 虚拟机简单配置
2011-03-24 11:57 4909Apache 虚拟机简单配置 配置虚拟机主要是基于主机 ... -
svn的使用
2011-03-17 16:10 10701,svn中有几个重要的概念:branche,tag,trun ... -
社交网页游戏解析之产品篇
2010-06-03 15:20 1020转载 ... -
常见手机参数含义
2010-05-18 14:45 11191,屏幕大小:如3.5英寸,它是指手机屏幕对角线的长度。 ... -
Memcache的使用和协议分析详解
2009-08-13 15:44 899作者:heiy ... -
CS vs BS
2009-08-07 09:12 1730C/S又称Client/Serv ... -
优秀网站源码、编程源码下载网站大集中
2009-08-06 17:41 975优秀网站源码、编程源码下载网站大集中 1.51源码:ht ...
相关推荐
TinyXML2是一个小型、快速且易于使用的XML解析库,主要用于C++编程。版本9.0.0是该库的一个更新版本,提供了最新的功能和错误修复。在这个版本中,开发者可以期待更加稳定和优化的XML处理性能。 TinyXML2的设计目标...
TinyXML-2 是一个简单、小型、高效的 C++ XML 解析器,可以被轻松集成到其他程序中。它使用文档对象模型(DOM)的方式解析XML,可解析 XML 文档,并根据该文档构建可读取、修改和保存的文档对象模型。 作为XML解析...
TinyXML2是一个轻量级、高效的C++库,专为解析和操作XML文档而设计。它的主要特点是简单易用,代码体积小,适合嵌入式系统或资源有限的环境。 TinyXML2的源码结构清晰,API简洁,使得开发者能快速上手并集成到现有...
TinyXML2是一个轻量级的XML解析库,主要由C++编写,旨在提供简单、高效的方式来读取和写入XML文档。它适用于各种平台,包括桌面系统和移动系统,如Android。这个库的设计目标是小巧且易于理解,使得开发者能够快速地...
在Linux和Windows下,编译TinyXml源码时,只需要一个符合C++标准的编译器即可。 在实际开发中,TinyXml可以广泛应用于配置文件读取、数据序列化和网络通信等领域。由于其轻量级的特性,它尤其适合资源有限或者性能...
个人感觉和java的xml解析类很相似,内附样例程序,不过最好还是到网上搜搜其他人的例子(PS:如果你不想看源码的话),网上发部的例子都是new了xmldocumen对象,(添加的元素节点都是以new的方式)却没有释放,这个...
在项目中使用TinyXML,首先需要下载TinyXML库,将其包含的头文件(如"tinyxml.h")和源文件(如"tinyxml.cpp")添加到工程中。如果是CMake构建系统,可以将头文件添加到include目录,源文件添加到src目录,并在...
TinyXML是一个轻量级的开源库,专门用于解析和操作XML文档。它是C++编写,设计简洁,易于理解和集成到各种项目中,特别是在资源有限或性能要求高的环境中,如WinCE系统。在这个环境下,TinyXML因其小而高效的特性,...
TinyXML 是一个开源的、轻量级的C++类库,专门用于解析和操作XML(eXtensible Markup Language)文档。它提供了简单且直观的API,使得开发者能够方便地读取、写入和修改XML文件。这个压缩包包含的就是TinyXML的源码...
TinyXML是一个开源的C++库,专门用于解析和操作XML(eXtensible Markup Language)文档。这个库设计得小巧而高效,适用于嵌入式系统和资源有限的环境。在提供的压缩包中,包含了TinyXML的源代码以及适用于Visual ...
1. 解压下载的tinyxml234压缩包,得到源码文件。 2. 打开Visual Studio 2010,创建一个新的C++项目,选择"Win32控制台应用程序"。 3. 在项目设置中,确保选中"静态库(.lib)"选项,而不是"可执行文件(.exe)"。 4. 将...
TinyXML 是一个开源的、轻量级的C++库,用于解析和操作XML(可扩展标记语言)文档。这个库的设计目标是简单易用,它提供了API,使得开发者能够方便地读取、写入XML文件。TinyXML的核心功能包括解析XML文档、创建XML...
7. **C++兼容**: TinyXML2完全用C++编写,与C++语言特性兼容,支持模板和STL容器,可以方便地集成到C++项目中。 8. **DOM模型**: TinyXML2采用的是Document Object Model (DOM) 模型,意味着整个XML文档被加载到...
TinyXML是开源的C++库,专门用于解析和操作XML(eXtensible Markup Language)文档。这个库设计得小巧且易于使用,使得在各种项目中集成XML支持变得简单。 TinyXML的名字暗示了其小巧的体积,但它在功能上却毫不逊色...
7. **源码结构**:Tiny XML源代码通常包括几个主要的头文件和源文件,如`tinyxml.h`、`tinyxml.cpp`等。开发者可以直接将这些文件包含到项目中,无需额外的库依赖。 8. **内存管理**:Tiny XML使用简单的内存管理...
TinyXml是一款轻量级的XML解析库,专为嵌入式系统和小型应用设计,它提供了C++接口来读写XML文档。TinyXml的核心优势在于其简单易用和小巧的体积,适合那些对内存和性能要求较为严格的项目。在本文中,我们将详细...
TinyXML是一个开源的轻量级XML解析库,适用于C++编程。它被设计为简单、易用且小巧,便于在嵌入式系统或资源有限的环境中使用。在本实例中,我们将探讨如何使用TinyXML库在Visual Studio 2008环境下解析XML文档。 ...
这通常包括下载TinyXml源码,将其添加到项目源文件中,或者将编译好的库文件链接到项目中。确保在项目的预处理器定义中包含`TIXML_USE_STL`,以便使用STL容器。 以下是一个简单的示例,展示如何在MFC对话框中使用...
TinyXML是一个开源、轻量级的C++库,专门用于解析和操作XML(eXtensible Markup Language)文件。XML是一种被广泛应用于数据交换、配置文件、文档存储等领域的标记语言。TinyXML的设计目标是简单易用,适用于嵌入式...
TinyXML-2,简称为tinyxml2,是一个轻量级的C++库,主要用于解析和操作XML(可扩展标记语言)文档。这个库的设计目标是简单、小巧且易于使用,适用于嵌入式系统和资源有限的环境。tinyxml2是由Lee Sandberg开发的,...