tinyxml2 开源库与 VS2010 结合使用

下面是 tinyxml2 开源库与 VS2010 结合使用的简单例子,包含环境配置和基础操作:

一、环境配置

  1. 下载 tinyxml2

从官网(leethomason/tinyxml2)下载源码,解压后得到 tinyxml2.h 和 tinyxml2.cpp 两个文件。

  1. 在 VS2010 中配置

  • 新建空项目(Win32 控制台应用程序)。

  • 将 tinyxml2.h 和 tinyxml2.cpp 复制到项目目录下,右键项目 →"添加"→"现有项",将两个文件添加到项目中。

二、使用示例(创建并读取 XML)

cpp

#include <iostream>

#include "tinyxml2.h"

using namespace tinyxml2;

using namespace std;

int main() {

// 1. 创建 XML 文档

XMLDocument doc;

// 添加声明(<?xml version="1.0" encoding="UTF-8"?>)

XMLDeclaration* decl = doc.NewDeclaration();

doc.InsertFirstChild(decl);

// 2. 创建根节点 <Students>

XMLElement* root = doc.NewElement("Students");

doc.InsertAfterChild(decl, root);

// 3. 添加子节点 <Student> 及属性、内容

XMLElement* student1 = doc.NewElement("Student");

student1->SetAttribute("ID", "001"); // 设置属性

root->InsertEndChild(student1);

XMLElement* name1 = doc.NewElement("Name");

name1->SetText("张三"); // 设置文本内容

student1->InsertEndChild(name1);

XMLElement* age1 = doc.NewElement("Age");

age1->SetText(18);

student1->InsertEndChild(age1);

// 再添加一个学生节点

XMLElement* student2 = doc.NewElement("Student");

student2->SetAttribute("ID", "002");

root->InsertEndChild(student2);

XMLElement* name2 = doc.NewElement("Name");

name2->SetText("李四");

student2->InsertEndChild(name2);

XMLElement* age2 = doc.NewElement("Age");

age2->SetText(20);

student2->InsertEndChild(age2);

// 4. 保存 XML 到文件

doc.SaveFile("Students.xml");

cout << "XML 文件创建成功!" << endl;

// 5. 读取并解析 XML 文件

XMLDocument readDoc;

XMLError err = readDoc.LoadFile("Students.xml");

if (err != XML_SUCCESS) {

cout << "读取 XML 失败!" << endl;

return 1;

}

// 获取根节点

XMLElement* readRoot = readDoc.RootElement();

// 遍历所有 Student 节点

XMLElement* student = readRoot->FirstChildElement("Student");

while (student) {

// 读取属性 ID

const char* id = student->Attribute("ID");

// 读取子节点内容

const char* name = student->FirstChildElement("Name")->GetText();

int age;

student->FirstChildElement("Age")->QueryIntText(&age); // 读取整数

cout << "ID: " << id << ", 姓名: " << name << ", 年龄: " << age << endl;

// 移动到下一个 Student 节点

student = student->NextSiblingElement("Student");

}

return 0;

}

三、运行结果

  1. 程序会生成 Students.xml 文件,内容如下:

xml

<?xml version="1.0" encoding="UTF-8"?>

<Students>

<Student ID="001">

<Name>张三</Name>

<Age>18</Age>

</Student>

<Student ID="002">

<Name>李四</Name>

<Age>20</Age>

</Student>

</Students>

  1. 控制台输出:

plaintext

XML 文件创建成功!

ID: 001, 姓名: 张三, 年龄: 18

ID: 002, 姓名: 李四, 年龄: 20

关键说明

  • 核心类: XMLDocument (文档)、 XMLElement (元素节点)、 XMLAttribute (属性)等。

  • 常用操作: NewElement (创建节点)、 SetAttribute (设置属性)、 SetText (设置文本)、 FirstChildElement (获取子节点)、 SaveFile / LoadFile (保存/加载文件)。

通过以上步骤,即可在 VS2010 中使用 tinyxml2 操作 XML 文件。

相关推荐
库玛西9 分钟前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试
AC赳赳老秦16 分钟前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
liulilittle39 分钟前
无锁并发容器的设计与实现原理
开发语言·c++·set·map·并发·无锁·lock-free
qeen871 小时前
【数据结构】自平衡二叉搜索树各种旋转算法原理解析及AVL树的C++实现
数据结构·c++·算法
airobotcn1 小时前
空地一体化巡检机器人系统落地实战指南
安全·机器人·无人机·智慧园区·巡逻
zcmodeltech1 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
lucas_AI1 小时前
1.2B 小模型赢过 235B 大模型:NaviDC-OCR 把文档解析卷明白了
人工智能·深度学习·算法
Augustzero1 小时前
为什么线程不能说睡就睡?看懂等待与唤醒机制
c++·后端
airobotcn2 小时前
智能巡检平台容器化部署:Docker+K8s在工业边缘的实践
人工智能·docker·容器·kubernetes·机器人·自动化
程序员与背包客_CoderZ2 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus