C++利用TinyXML读取XML文件

TinyXML是什么?

TinyXML是一个轻量级的C++ XML解析器,它提供了一种简单的方法来解析和操作XML文档。TinyXML被设计为易于使用和集成到C++项目中,并且非常适合处理小型XML文件。

以下是TinyXML的一些主要特点和优点:

轻量级: TinyXML的设计目标之一是保持代码库的小巧简洁,因此它非常适合用于嵌入式系统或具有资源限制的环境。

简单易用: TinyXML提供了简单直观的API,使得解析和操作XML文档变得容易。它的API设计使得开发人员可以快速上手并完成XML处理任务。

跨平台性: TinyXML是跨平台的,可以在各种操作系统上运行,包括Windows、Linux和Mac OS等。

开源: TinyXML是开源的,可以在许可证允许的情况下免费使用和修改。

支持XML解析和生成: TinyXML支持解析XML文档,并且可以将XML数据写入到文件或内存中。

适用于小型XML文件: 尽管TinyXML可以解析和处理XML文件,但它更适用于处理小型XML文件,因为它的设计目标之一是保持简洁和高效。

虽然TinyXML功能不如一些更复杂的XML库,但它的简单性和轻量级使得它成为处理小型XML任务的良好选择。

下载:TinyXML download | SourceForge.net

打开下载后的文件,将下面六个文件复制,两个头文件,四个cpp文件

下面我会通过静态库的形式调用TinyXML库。

用VS新建一个空白工程

将刚刚复制的六个文件放入该工程中

修改项目属性,改为lib静态库

点击生成解决方案,提示成功即可

打开工程目录,并返回上一级

找到X64文件

新建一个文件夹,命名为lib, 复制**.lib**文件,放入lib文件夹中

而后将下载的XML库文件内的两个头文件单独复制出来,放到一个新建的文件夹include内

最后我们现在就会得到两个文件夹

现在我们新建一个工程,在VC++目录内修改包含目录和库目录

包含目录为刚刚我们新建的include文件夹

库目录为刚刚新建的Lib文件夹

最后在"链接器"---"输入"---附加依赖项

将附加依赖项改为我们lib文件夹内的 .lib文件的绝对路径

比如说:Z:\WorkPlace\test-0001\lib\test-0001.lib

代码测试:

测试所需的文件:

链接: https://pan.baidu.com/s/1uV3W7z2C3IDYBubkV2ZC_Q?pwd=dnkm 提取码: dnkm 复制这段内容后打开百度网盘手机App,操作更方便哦

--来自百度网盘超级会员v5的分享

cpp 复制代码
#include "tinyxml.h"
#include <iostream>

int main() {
	//读取XML文件
	TiXmlDocument doc("Z:\\XML1.xml"); // 
	if (!doc.LoadFile()) {
		std::cerr << "Failed to load file" << std::endl;
		return -1;
	}

	TiXmlElement* root = doc.RootElement(); // 获取根元素
	if (!root) {
		std::cerr << "Failed to find root element" << std::endl;
		return -1;
	}

	// 直接获取<params>元素
	TiXmlElement* params = root->FirstChildElement("params");
	if (params) {
		// 遍历<params>下的所有子元素
		for (TiXmlElement* param = params->FirstChildElement(); param; param = param->NextSiblingElement()) {
			const char* paramName = param->Value();  // 获取元素名称
			const char* paramValue = param->GetText(); // 获取元素的文本内容

			// 使用printf输出
			printf("%s: %s\n", paramName, paramValue);
		}
	}
	else {
		std::cerr << "No <params> element found" << std::endl;
	}

	return 0;
}

测试结果:

至此,我们调用TinyXML库读取XML文件的过程就结束了。

相关推荐
编程版小新几秒前
C++初阶:STL详解(四)——vector迭代器失效问题
开发语言·c++·迭代器·vector·迭代器失效
AlexMercer10121 小时前
【C++】二、数据类型 (同C)
c语言·开发语言·数据结构·c++·笔记·算法
小灰灰爱代码2 小时前
C++——求3个数中最大的数(分别考虑整数、双精度数、长整数的情况),用函数模板来实现。
开发语言·c++·算法
BeyondESH3 小时前
Linux线程同步—竞态条件和互斥锁(C语言)
linux·服务器·c++
豆浩宇3 小时前
Halcon OCR检测 免训练版
c++·人工智能·opencv·算法·计算机视觉·ocr
WG_173 小时前
C++多态
开发语言·c++·面试
Charles Ray5 小时前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
重生之我在20年代敲代码5 小时前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
迷迭所归处10 小时前
C++ —— 关于vector
开发语言·c++·算法
CV工程师小林11 小时前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先