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文件的过程就结束了。

相关推荐
纪念 2291 小时前
C++类和对象(二)
开发语言·c++
钓鱼的肝1 小时前
csp-j-s总结(1)
c++·笔记·算法·青少年编程
linx2951 小时前
第七章 · 标准库容器、算法与 ranges
c语言·开发语言·数据结构·c++·算法
钓鱼的肝2 小时前
csp-j-s总结(4)
c++·经验分享·笔记·算法
别动我齐刘海2 小时前
ROS2 Jazzy + C++ 实战路线——基础学习1
c++·vscode·python·ubuntu·机器学习·自动驾驶·github
j7~2 小时前
【Linux网络加餐】(篇七)网络版计算器(中):协议落地、报文分隔与完整链路
linux·c++·网络编程·tcp·报文分割·网络计算器·协议落地
青少儿编程课堂2 小时前
多源最短路与最小环(Floyd 算法图论解析)
c++·python·算法·bfs·信息学竞赛
6Hzlia3 小时前
【Classic 150 刷题计划】 LeetCode 228. 汇总区间 | C++ 锚点游标与断点检测法
c++·算法·leetcode
Severus_black3 小时前
【C++初阶】模板初阶——为何C++能和C语言拉开差距?
c++
艾莉丝努力练剑5 小时前
【AI大模型接入SDK】LLM会话管理模块设计
网络·c++·人工智能·学习·大模型