C++库(TinyXML)

什么是XML?

  “当 XML(扩展标记语言)于 1998 年 2 月被引入软件工业界时,它给整个行业带来了一场风暴。有史以来第一次,这个世界拥有了一种用来结构化文档和数据的通用且适应性强的格式,它不仅仅可以用于 WEB,而且可以被用于任何地方。”

  XML 指扩展标记语言,是一种信息交换的标准。

<!-- a xml simple example-->
<Persons>
        <Person ID="1">
            <name>Kobe</name>
            <age>24</age>
        </Person>
        <Person ID="2">
            <name>Michael</name>
            <age>23</age>
       </Person>
 </Persons>

什么是TinyXML?

  当前,对xml的使用非常广泛,读取和设置xml配置文件是我们最常用的操作。常见C/C++ XML解析器有Tinyxml、XERCES、squashxml、xmlite、pugxml、libxml等等,这些解析器有些是支持多语言的,有些只是单纯C/C++的。

  TinyXML是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

下载安装TinyXML

  下载https://sourceforge.net/projects/tinyxml/

      安装:解压缩tinyXML后,将这六个文件添加到你的C++工程中,分别是tinystr.h、tinystr.cpp、tinyxml.h、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp。在需要操作xml文件的地方,使用如下代码,就可以引入TinyXML类库。

#include<tinyxml>   或 #include "tinyxml.h"

TinyXML类结构

  TiXmlBase:整个TinyXML模型的基类。

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

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

  TiXmlComment:对应于XML中的注释

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

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

  TiXmlElement:对应于XML的元素。

  TiXmlText:对应于XML的文字部分

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

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

 

一个XML读写例子

 1 #include <iostream>
 2 #include "tinyxml.h"
 3 #include "tinystr.h"
 4 #include <string>
 5 #include <windows.h>
 6 #include <atlstr.h>
 7
 8 using namespace std;
 9
10 CString GetAppPath()
11 {
12     TCHAR modulePath[MAX_PATH];
13     GetModuleFileName(NULL, modulePath, MAX_PATH);
14     CString strModulePath(modulePath);
15     strModulePath = strModulePath.Left(strModulePath.ReverseFind(_T(‘\\‘)));
16     return strModulePath;
17 }
18
19 bool CreateXmlFile(string& szFileName)
20 {
21     try
22     {
23         TiXmlDocument *myDocument = new TiXmlDocument();
24         TiXmlElement *RootElement = new TiXmlElement("Persons");
25         myDocument->LinkEndChild(RootElement);
26         TiXmlElement *PersonElement = new TiXmlElement("Person");
27         RootElement->LinkEndChild(PersonElement);
28         PersonElement->SetAttribute("ID", "1");
29         TiXmlElement *NameElement = new TiXmlElement("name");
30         TiXmlElement *AgeElement = new TiXmlElement("age");
31         PersonElement->LinkEndChild(NameElement);
32         PersonElement->LinkEndChild(AgeElement);
33         TiXmlText *NameContent = new TiXmlText("Michael");
34         TiXmlText *AgeContent = new TiXmlText("23");
35         NameElement->LinkEndChild(NameContent);
36         AgeElement->LinkEndChild(AgeContent);
37         CString appPath = GetAppPath();
38         string seperator = "\\";
39         string fullPath = appPath.GetBuffer(0) +seperator+szFileName;
40         myDocument->SaveFile(fullPath.c_str());
41     }
42     catch (string& e)
43     {
44         return false;
45     }
46     return true;
47 }
48
49 bool ReadXmlFile(string& szFileName)
50 {
51     try
52     {
53         CString appPath = GetAppPath();
54         string seperator = "\\";
55         string fullPath = appPath.GetBuffer(0) +seperator+szFileName;
56         TiXmlDocument *myDocument = new TiXmlDocument(fullPath.c_str());
57         myDocument->LoadFile();
58         TiXmlElement *RootElement = myDocument->RootElement();
59         cout << RootElement->Value() << endl;
60         TiXmlElement *FirstPerson = RootElement->FirstChildElement();
61         TiXmlElement *NameElement = FirstPerson->FirstChildElement();
62         TiXmlElement *AgeElement = NameElement->NextSiblingElement();
63         TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute();
64         cout << NameElement->FirstChild()->Value() << endl;
65         cout << AgeElement->FirstChild()->Value() << endl;
66         cout << IDAttribute->Value()<< endl;
67     }
68     catch (string& e)
69     {
70         return false;
71     }
72     return true;
73 }
74
75 int main(void)
76 {
77     string fileName = "info.xml";
78     CreateXmlFile(fileName);
79     ReadXmlFile(fileName);
80 }
时间: 2024-10-06 04:34:43

C++库(TinyXML)的相关文章

VC环境使用XML解析器(TinyXML)编程

我是在VC下编译运行. 1.首先下载TinyXML库的文件,这里给出链接http://prdownloads.sourceforge.net/tinyxml/tinyxml_2_3_4.zip?download 2.下载后解压这个压缩包,把所有的东西放到一个找的着的地方(比如,E:\开发库\TinyXML) 3.用Visual C++(推荐VC++.NET2003)创建一个新的工程(Win32控制台) 4.在TinyXML的目录里面找到tinystr.h, tinyxml.h, tinystr.

视音频编解码基本术语及解释

摘要:          整理了一些基本视音频术语,用于入门和查询使用. H264: H264是视频的标准,是MPEG4-10,基于内容的高效编码方式. H.264/MPEG-4第10部分,或称AVC(AdvancedVideo Coding,高级视频编码),是一种视频压缩标准,一种被广泛使用的高精度视频的录制.压缩和发布格式.第一版标准的最终草案于 整理了一些基本视音频术语,用于入门和查询使用. H264: H264是视频的标准,是MPEG4-10,基于内容的高效编码方式. H.264/MPE

一款批量修改AE模板的工具

一.需求分析 对于视频后期剪辑及相关从业人员来说,AE(After Effects)模板效果是一个不错的开始点.在模板效果的基础上,可以很快的做出各种炫酷的后期效果.但是在网上下载的模板工程中,往往包含了非常多的模板文字.图片.图形实体.AI资源等.这些资源文件往往并不是我们需要的,在使用模板时需要手动替换或者删除.但是网上下载的模板工程往往非常大,包含的资源非常多.这样手动改动起来的话,工作量会成倍增加.那么,是否可以考虑做一个小工具来高效完成这项枯燥的工作呢?要替换模板中的文字和图片,第一步

Adobe After Effects工程使用aep格式来存储

写页面的时候发现好几处的按钮都是这种样式,于是把这个按钮的样式单独提取出来放着全局css文件中 .base-btn { display: block; width: 90%; height: 54px; line-height: 54px; text-align: center; background-color: #14B5A9; color: #fff; font-size: 1.4rem; margin: 0 auto; } 但这绝对是个不正确的做法,还不如不提取,因为写的太死,这也就是新

windows客户端开发--使用tinyxml库解析xml文件

例如,微信windows客户端使用的duilib库中,界面就是用xml进行描述的. 所以,今天我们就来谈一谈windows客户端中,也就是C++中如何解析xml. 很多时候,我们都使用.ini文件来存储一些数据. xml确实是有很多的优点,某种程度上来说也确实可以完全取代ini,但也并非如有些人鼓吹的处处都比ini强. xml,对于描述复杂的数据结构非常的方便,缺点相对ini使用麻烦一点.在表达较短的配置时,没有ini简练.而且因为它有比较严格的格式审查机制,容错性也不是特别好,在手写时容易出现

tinyxml库

http://files.cnblogs.com/files/ggjucheng/tinyxml.zip 文档下载 源码下载

使用CMake在Linux下编译tinyxml静态库

环境:CentOS6.6+tinyxml_2_6_21.下载并解压tinyxml_2_6_2.zip unzip tinyxml_2_6_2.zip 2.在tinyxml文件夹里创建一个CMakeLists.txt文件,并将内容设置为 cmake_minimum_required(VERSION 2.8) project(TinyXMLLIB) include_directories(./) aux_source_directory(./ LIB_SRCS) #add_definitions(-

C/C++框架和库 (真的很强大) 转

http://blog.csdn.net/xiaoxiaoyeyaya/article/details/42541419 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行. 下载链接:http://home.tiscali

值得推荐的C/C++框架和库(深度好文)

[本文系外部转贴,原文地址:http://www.cppblog.com/merlinfang/archive/2014/12/26/209311.html http://coolshell.info/c/c++/2014/12/13/c-open-project.htm]留作存档 公交车上看到的好文,忍不住转发!下次造轮子前先看看现有的轮子吧-- 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客