TinyXML使用方法

article/2025/9/26 8:50:23

TinyXML 使用说明

  TinyXML是一个C++的XML解析库,网上的评价都不错,是一个轻量级的XML解析库。关于TinyXML使用的文章有很多,而且官方也有完整的文档,这里只是简单把自己使用记录写下来,方便以后查阅。

  

    一个XML文档例子:(文章后面会把这个XML当作例子使用)

 

复制代码
 <!-- test.xml -->

<Persons>
<Person ID="1">
周星星
</Person>
<Person ID="2">
白晶晶
</Person>
</Persons>
复制代码



 

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来调用。

 

    使用的时候,只要把tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp 这六个文件导入工程,然后#include ” tinyxml.h”就可以使用。

 

在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的一些操作。

 

这些类都是对应XML文件的一些元素,所以最好对XML文件有一些必要的了解。

 

TinyXML库对字符串可以使用两种编译方式:char * 以及 string 。所以我们在Wince使用的时候需要注意宽字符的转换。

 

1、将一个文件加载到 TinyXML DOM 中的最简单方法:

 

1 TiXmlDocument doc( "demo.xml" );
2
3 //注意TiXmlDocument构造方法参数类型是string
4 doc.LoadFile();



2、创建XML文件

 

复制代码
 1 TiXmlDocument doc;
2
3 //xml文件声明部分
4 TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );
5
6 //添加新的节点元素
7 TiXmlElement * element = new TiXmlElement( "Hello" );
8
9 //对应Hello节点的值
10 TiXmlText * text = new TiXmlText( "World" );
11
12 //Hello 节点是文本节点,没有子节点
13 element->LinkEndChild( text );
14
15 //把声明和元素添加到文档
16 doc.LinkEndChild( decl );
17 doc.LinkEndChild( element );
18
19 //保存文档,修改过的xml文件一定要调用SaveFile方法保存数据
20 doc.SaveFile( "madeByHand.xml" );
复制代码



3、遍历整个XML文档

XML文档遍历,主要就是把DOM里面的元素、节点、节点属性全部遍历一次。

 

复制代码
//首先需要找到根节点,

TiXmlElement * rootElement = doc.RootElement();

//根节点的第一个子节点(根节点、子节点的概念,请看参考资料)

TiXmlElement * firstElement = rootElement->FirstChildElement();
复制代码

 

 

然后可以用上面的方法循环查询同一个节点下的子节点,再加上一个递归循环就可以查询所有的节点。具体代码看参考工程里面的例子。具体代码已经封装成函数。TinyXMLCtl.h头文件

 

 

我们在Wince里面大部分时候可能都是使用查询XML里面的数据,下面针对给出一个简单的查询功能,然后界面一些TinyXML里面的常用方法。

 

这是一个简单的遍历查询XML文档的代码,功能是遍历XML文档下根节点下的所有兄弟节点。(如果需要遍历兄弟节点下的子节点,需要加个递归调用就好)

 

 

复制代码
//查找根节点,rootElement就是指向<Persons>元素(看文档刚开始时给出的XML文件)

TiXmlElement * rootElement = doc.RootElement();

//查找根节点下第一个子节点,firstElement 指向第一个<Person>节点

TiXmlElement * firstElement = rootElement->FirstChildElement();



TiXmlElement *nextElement = firstElement;

//我在使用的时候使用了TinyXML的char * 字符编译,所以使用的方法返回的字//符串都是 char * 类型的。

const char *value;

const char *name;



//保存遍历得到的数据

CString temp;



//循环遍历根节点下的兄弟节点

while(nextElement)

{

//取出节点的文本节点内容,第一个Person节点的值是周星星

value = nextElement->GetText();

//取出节点的节点名字,第一个节点是Person

name = nextElement->Value();

//TinyXML里面返回的是char *类型的数据,这里要把它转为宽字符,最简单的方法是//直接转为CString,当然也可以用//MultiByteToWideChar,WideCharToMultiByte这两个微软提供的宽字符转换的//函数进行转换,在TinyXMLCtl.h里面,给出了两个封装的函数,具体请自行查看。

CString mmValue(value);

CString mmName(name);

temp = temp + mmValue + L""+ mmName+L"";

//查找下一个兄弟节点的指针

nextElement = nextElement->NextSiblingElement();

}
复制代码



上面最后temp字符串里面应该存放的是:Person 周星星 Person 白晶晶 。

 

上面只是一个简单遍历同级兄弟节点的方法,只要掌握这几个常用方法就可以自己拓展出复杂的查询方法。

 

下面再给出对数据常用的操作方法:增删改查 的简单例子和解析

 

4、修改XML节点

 

复制代码
//下面例子是修改test.xml第一个person节点的值“周星星”改为“星星”

//加载文档到DOM,跟上面一样

TiXmlDocument doc("test.xml");

doc.LoadFile();

//获取一个DOM的句柄,操作XML可以用节点Node、元素Element、或者句柄Handle都可//以。三种操作可以根据实际进行转换,转换方法可以参考官方文档。

TiXmlHandle docHandle( &doc );

//找到要修改的那个节点指针,这里是具体知道节点结构才这么做。实际使用的时候,我们需//要遍历查找一个节点名。在TinyXMLCtl.h头文件给出了实现的方法。下面这句话功能跟//doc.RootElement()效果一样,都是为了找到根节点。

TiXmlElement* DesElement = docHandle.FirstChild("Persons "). ToElement();

//找到该节点的第一个子节点(我们要修改的节点)

TiXmlNode * oldnode = DesElement->FirstChild();

//这里先获取该节点的

const char *ver = DesElement ->GetText();

//新的值,注意字符编码转换问题

string strText=”星星”;

TiXmlText *pValue = new TiXmlText(strText.c_str());

// 首先清除所有文本

pNode->Clear();

//把新文本添加进去,这里只是其中一种修改方法,还可以调用ReplaceChild()方法修改。

pNode->LinkEndChild(pValue);

//一定要保存文件,否则修改无效

doc.SaveFile();
复制代码

 


 

 

5、删除XML节点

节点删除,注意使用两个方法:

RemoveChild( TiXmlNode* removeThis )//方法删除父节点的子节点
RemoveAttribute( const char * name )//方法删除属性值.

 

复制代码
 1 //删除第一个节点Person
2
3 TiXmlDocument doc( "\\Storage Card\\test.xml" );
4
5 doc.LoadFile();
6
7 TiXmlElement * rootElement = doc.RootElement();
8
9 TiXmlElement * firstElement = rootElement->FirstChildElement();
10
11 //删除根节点下的第一个节点
12
13 RemoveChild(firstElement);
14
15 doc.SaveFile();
复制代码

 


 

5、新增XML节点

//加载文档

 

复制代码
 1 TiXmlDocument *pDoc = new TiXmlDocument();
2
3 pDoc->LoadFile(pXMLFile);
4
5 TiXmlElement * rootElement = doc.RootElement();
6
7 TiXmlElement * firstElement = rootElement->FirstChildElement();
8
9
10 string strText=“hello”;
11
12 // 生成子节点:pNewNode
13
14 TiXmlElement *pNewNode = new TiXmlElement(strNodeName.c_str());
15
16 // 设置节点文本,然后插入节点
17
18 TiXmlText *pNewValue = new TiXmlText(strText.c_str());
19
20 pNewNode->LinkEndChild(pNewValue);
21
22 //插入节点
23
24 pNode->InsertEndChild(*pNewNode);
25
26 pDoc->SaveFile(pXMLFile);
复制代码




http://chatgpt.dhexx.cn/article/GCVWB7YI.shtml

相关文章

C++ 本地使用tinyxml2解析Xml文件

1、基本介绍 TinyXML2是一个开源、简单、小巧、高效的C XML解析器&#xff0c;它只有一个.h文件和一个.cpp文件组成&#xff0c;可以轻松集成到其它程序中。非常方便我们使用c对xml进行处理。 可以读取、修改和保存的文档对象模型(Document Object Model, DOM)。它不能解析DTD…

快速上手 TinyXML-2 不完全教程

TinyXML-2 不完全教程 XML 作为程序开发中非常常用的数据文档之一&#xff0c;各个语言或是开发环境都有对应的用于处理 XML 文件的库。在 C 语言中&#xff0c;TinyXML-2 就是这样的一个库。 TinyXML-2 是一个简单&#xff0c;小巧&#xff0c;高性能的 C 的 XML 解析器&…

开源库TinyXML2简介及使用

TinyXML2是一个开源、简单、小巧、高效的C XML解析器&#xff0c;它只有一个.h文件和一个.cpp文件组成&#xff0c;可以轻松集成到其它程序中。它解析XML文档并从中构建可以读取、修改和保存的文档对象模型(Document Object Model, DOM)。它不能解析DTD(Document Type Definiti…

c/c++操作xml库-Tinyxml2入门及高级用法

一、概念 TinyXML2是一个开源、简单、小巧、高效的C XML解析器&#xff0c;它只有一个.h文件和一个.cpp文件组成&#xff0c;可以轻松集成到其它程序中。它解析XML文档并从中构建可以读取、修改和保存的文档对象模型(Document Object Model, DOM)。它不能解析DTD(Document Typ…

关于Anaconda卸载干净的问题【已解决】

在卸载anaconda时&#xff0c;为了卸载干净&#xff0c;一般会在win10自带的 应用与功能中选择anaconda 进行卸载。 &#xff0c;也可以用anaconda文件中卸载程序Uninstall-Anaconda3.exe进行卸载。 然后再把相应路径下的剩余文件删掉。 但是&#xff01; 这还不够&#xff0c…

anaconda卸载后重装问题

记录一下anaconda卸载后&#xff0c;重新安装后缺少很多文件&#xff0c;重装后打开Anaconda Navigator&#xff0c;发现内容一片空白&#xff0c;软件也不见了&#xff0c;库也不见了&#xff0c;开始菜单也没有anaconda和anaconda prompt&#xff0c;只有如下很少的文件。网上…

如何彻底卸载Anaconda3

阅览了其他大神的卸载文章后&#xff0c;如 https://blog.csdn.net/qq_40605139/article/details/95249601 这篇就给了我很多指导&#xff0c;但我在运行第一句的 conda install anaconda-clean 后就出错了&#xff0c;提示截图如下&#xff1a; 然后就是各种百度&#xff0c;…

Anaconda卸载后重装过程

文章目录 前言一、卸载二、删除注册表三、下载安装包四、安装五、改环境变量六、检验参考文章 前言 因为之前装虚拟机的时候清理磁盘被迫卸掉anaconda&#xff0c;现在又要用jupyter notebook写作业&#xff0c;所以重新装了一遍&#xff0c;记录一下过程备用&#xff0c;也是…

anaconda卸载后重装的悲剧

在经历了无比绝望的一天后&#xff0c;我终于在意志消磨完的最后一刻成功完成了anaconda的卸载重装&#xff0c;这一天过的可以说是非常绝望了。上午还在开开心心的准备下载pytorch库进行学习&#xff0c;结果在更新依赖库的时候没有使用虚拟环境结果导致anaconda崩了&#xff…

CentOS安装/卸载Anaconda(图文详解)

目录 一、Anaconda下载 二、安装Anaconda 三、添加环境 四、卸载 1.删除anaconda文件目录 2.清理.bashrc中的Anaconda路径 一、Anaconda下载 众所周知的原因&#xff0c;从官网下载Anaconda非常慢&#xff0c;因此为了加速下载&#xff0c;这里我们采取清华源下载。 不…

Anaconda安装、查看、卸载第三方库

Anaconda安装第三方库&#xff1a; 下载第三方库&#xff1a;下载地址&#xff1a;https://www.lfd.uci.edu/~gohlke/pythonlibs/ 1、CtrlF 查找 2、下载&#xff0c;点击即可&#xff0c;注意下载的文件要与python环境相匹配 3、将下载的 .whl文件放入...yourpath....\Ana…

恢复anaconda环境, 卸载anaconda, 重装anaconda

在重装anaconda前思考一下是因为什么原因才要重装&#xff0c;如果是因为自己原先的配置好的环境变量在更新时候错乱了&#xff0c;其实可以通过回滚来回复的。 回滚 如果只是为了回复anaconda的环境&#xff0c;其实可以通过命令首先查看anaconda的 环境的历史记录&#xff0…

conda 的安装和卸载

conda 的安装和卸载 针对 ubuntu20.04 ubuntu20.04 是 “西柚云” 主要使用的操作系统 西柚云官网 文章目录 conda 的安装和卸载安装卸载重装 安装 下载 conda 的安装脚本&#xff08;这里使用清华大学的镜像&#xff09; cd ~ # 推荐将 conda 安装在家目录下 wget -c https…

彻底卸载并重装Anaconda环境与Python的方法

本文介绍在Windows平台下&#xff0c;彻底删除Anaconda环境与其自带Python版本&#xff0c;并进行重新安装的方法。 最近&#xff0c;由于原有Anaconda环境中的部分第三方库出现了冲突的情况&#xff0c;且基于“Anaconda Prompt (anaconda3)”也无法升级Anaconda与相关库了&am…

[转载] 怎样彻底卸载anaconda?

彻底卸载anaconda的方法&#xff1a;1、安装Anaconda-Clean package&#xff1b;2、执行【anaconda-clean --yes】命令&#xff1b;3、运行Uninstall-Anaconda3.exe程序即可。 1、安装 Anaconda-Clean package 记得要以管理员身份打开 打开 Anaconda Prompt&#xff0c; 输…

超详细彻底卸载Anaconda详细教程

一、在开始处打开Anaconda Prompt 二、打开后&#xff0c;输入conda install tqdm -f命令并按回车键 conda install tqdm -f三、之后页面会出现一个WANNING&#xff0c;这个我们不用在意&#xff0c;然后会出现一个y/n提示框&#xff0c;在这里我们输入y或者Y y四、输入cond…

关于anaconda的使用和Python库的安装、卸载

本文主要内容 一、anaconda1、anaconda的作用2、一些常用的anaconda命令 二、Python库的安装方法一&#xff1a;pycharm解释器中进行添加&#xff08;一般不推荐&#xff0c;速度慢&#xff09;方法二、控制面板中进行安装&#xff08;最常用&#xff09;方法三、离线安装 三、…

Unbuntu卸载anaconda(最新最全亲测)

文章目录 前言一、删除anaconda文件夹二、删除Anaconda的环境变量总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#x…

一、如何完全卸载Anaconda(如何下载Anaconda-Clean package)

因为一些不可描述的原因必须要卸载Anaconda。 一、在我的Anaconda不可用后&#xff0c;按照其他博主的方法进行尝试卸载Anaconda&#xff0c;发现Anaconda--clean安装不可使用&#xff0c; 二、之后我苦苦寻找方法&#xff0c;发现都不怎么可行&#xff0c;直到我碰到一位博主的…

如何卸载、删除Anaconda?

Anaconda这么好用&#xff0c;为啥要删呢&#xff1f;当然是我之前装得乱七八糟&#xff0c;导致现在心情不好。我要把它全部删掉&#xff01; ok&#xff0c;开始~ 删除思路&#xff1a; 首先利用anaconda-clean清理包清理配置文件&#xff0c;然后直接用安装目录下的卸载程序…