TinyXML-2介绍

1.简介

TinyXML-2 是一个简单、小巧的 C++ XML 解析库,它是 TinyXML 的一个改进版本,专注于易用性和性能。TinyXML-2 用于读取、修改和创建 XML 文档。它不依赖于外部库,并且可以很容易地集成到项目中。

tinyXML-2 的主要特点包括:

  • DOM 风格 API:TinyXML-2 提供了 Document Object Model(DOM)风格的API,允许开发者以树形结构的方式操作 XML 数据。
  • 轻量级:TinyXML-2 的代码量小,不需要外部依赖,适合嵌入式系统和移动设备。
  • 易于使用:TinyXML-2 的 API 设计直观,易于理解和集成。
  • 错误处理:TinyXML-2提供了详细的错误信息,帮助开发者快速定位问题。

2.环境搭建

下载地址:https://github.com/leethomason/tinyxml2/tree/10.0.0

解压文件后,直接引用以下两个文件即可。

3.代码示例

解析XML字符串。

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

using namespace std;
using namespace tinyxml2;

int main()
{
	static const char* xml =
		"<?xml version=\"1.0\"?>"
		"<!DOCTYPE PLAY SYSTEM \"play.dtd\">"
		"<information>"
		"	<attributeApproach v='2' />"
		"	<textApproach>"
		"		<v>2</v>"
		"	</textApproach>"
		"</information>";

	XMLDocument doc;
	doc.Parse(xml);

	int v0 = 0;
	int v1 = 0;

	XMLElement* attributeApproachElement = doc.FirstChildElement()->FirstChildElement("attributeApproach");
	attributeApproachElement->QueryIntAttribute("v", &v0);

	XMLElement* textApproachElement = doc.FirstChildElement()->FirstChildElement("textApproach");
	textApproachElement->FirstChildElement("v")->QueryIntText(&v1);

	printf("Both values are the same: %d and %d\n", v0, v1);

	return doc.ErrorID();
}

使用以下代码,可以直接加载XML文件。

cpp 复制代码
XMLDocument doc;
doc.LoadFile( "resources/dream.xml" );

写入XML文件。

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

using namespace std;
using namespace tinyxml2;

int main()
{
	XMLDocument* doc = new XMLDocument();

	XMLNode* declaration = doc->InsertFirstChild(doc->NewDeclaration("xml version=\"1.0\" encoding=\"UTF-8\""));

	XMLNode* element = doc->InsertEndChild(doc->NewElement("element"));

	XMLElement* sub[3] = { doc->NewElement("sub"), doc->NewElement("sub"), doc->NewElement("sub") };
	for (int i = 0; i < 3; ++i) 
	{
		sub[i]->SetAttribute("attrib", i);
	}
	element->InsertEndChild(sub[2]);

	XMLNode* comment = element->InsertFirstChild(doc->NewComment("comment"));

	element->InsertAfterChild(comment, sub[0]);
	element->InsertAfterChild(sub[0], sub[1]);
	sub[2]->InsertFirstChild(doc->NewText("Text!"));

	XMLElement* sub4 = doc->NewElement("textApproach");

	element->InsertAfterChild(sub[2], sub4);

	XMLElement* sub5 = doc->NewElement("v");
	sub4->InsertFirstChild(sub5);

	sub5->InsertFirstChild(doc->NewText("2"));

	doc->Print();

	doc->SaveFile("./pretty.xml");

	return 0;
}

运行结果:

4.更多参考

libVLC 专栏介绍-CSDN博客

Qt+FFmpeg+opengl从零制作视频播放器-1.项目介绍_qt opengl视频播放器-CSDN博客

QCharts -1.概述-CSDN博客

JSON++介绍

相关推荐
久绊A6 分钟前
Python 基本语法的详细解释
开发语言·windows·python
软件黑马王子4 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
闲猫4 小时前
go orm GORM
开发语言·后端·golang
黑不溜秋的5 小时前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
李白同学5 小时前
【C语言】结构体内存对齐问题
c语言·开发语言
黑子哥呢?6 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash
青龙小码农6 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx
大数据追光猿7 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Dream it possible!7 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
柠石榴7 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯