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

相关推荐
端平入洛18 小时前
delete又未完全delete
c++
端平入洛2 天前
auto有时不auto
c++
哇哈哈20213 天前
信号量和信号
linux·c++
多恩Stone3 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
蜡笔小马3 天前
21.Boost.Geometry disjoint、distance、envelope、equals、expand和for_each算法接口详解
c++·算法·boost
超级大福宝3 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
weiabc3 天前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法
问好眼3 天前
《算法竞赛进阶指南》0x01 位运算-3.64位整数乘法
c++·算法·位运算·信息学奥赛
yyjtx3 天前
DHU上机打卡D31
开发语言·c++·算法
czxyvX3 天前
020-C++之unordered容器
数据结构·c++