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

相关推荐
春蕾夏荷_72829772537 分钟前
Sockets-2.3.9.9 UDP使用实例
c++·udp
GetcharZp1 小时前
拒绝硬编码!C++ 配置文件管理神器 yaml-cpp 实战指南
c++
墨有6662 小时前
C++ string 部分功能详解:迭代器、初始化与常用函数
开发语言·c++
枫叶丹42 小时前
【Qt开发】Qt系统(二)-> 事件分发器
c语言·开发语言·数据库·c++·qt·系统架构
千里马-horse3 小时前
Rect Native bridging 源码分析--AString.h
c++·ts·rn·jsi
闻缺陷则喜何志丹3 小时前
【二分查找】P10091 [ROIR 2022 Day 2] 分数排序|普及+
c++·算法·二分查找
阿豪只会阿巴5 小时前
【多喝热水系列】从零开始的ROS2之旅——Day4
c++·笔记·python·ros2
郭涤生6 小时前
fmtlib/fmt仓库熟悉
c++
Stanford_11066 小时前
【2026新年启程】学习之路,探索之路,技术之路,成长之路……都与你同行!!!
前端·c++·学习·微信小程序·排序算法·微信开放平台
郝学胜-神的一滴6 小时前
Linux线程属性设置分离技术详解
linux·服务器·数据结构·c++·程序人生·算法