推荐使用TinyXML-2解析C++中的XML文件,因其轻量、易集成且支持读写;通过包含头文件、加载文档、遍历节点、读取属性与文本内容,可高效处理XML数据;示例涵盖加载、解析嵌套结构、创建新文件,并对比RapidXML、pugixml和Xerces-C++,突显TinyXML-2在中小型项目中的优势。

在C++中处理XML文件,通常不建议手动解析文本,因为XML结构复杂,容易出错。推荐使用成熟的开源库来读取和操作XML数据。TinyXML-2 是其中最常用、轻量且易于集成的库之一。下面介绍如何使用 TinyXML-2 解析 XML 文件。
TinyXML-2 是 TinyXML 的改进版本,更高效、更简洁,仅依赖标准 C++ 库,支持读写 XML 文件。
获取方式:
使用 TinyXML-2 解析 XML 文件的基本流程如下:
立即学习“C++免费学习笔记(深入)”;
示例代码:
#include <iostream>
#include "tinyxml2.h"
<p>using namespace tinyxml2;</p><p>int main() {
XMLDocument doc;
XMLError result = doc.LoadFile("example.xml");
if (result != XML_SUCCESS) {
std::cout << "无法加载 XML 文件!" << std::endl;
return -1;
}</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">// 获取根节点
const XMLElement* root = doc.RootElement();
if (!root) {
std::cout << "根节点为空!" << std::endl;
return -1;
}
std::cout << "根元素名称: " << root->Name() << std::endl;
// 遍历子节点
for (const XMLElement* elem = root->FirstChildElement();
elem != nullptr;
elem = elem->NextSiblingElement()) {
std::cout << "元素名: " << elem->Name();
// 输出文本内容(如果存在)
if (elem->GetText()) {
std::cout << ", 值: " << elem->GetText();
}
std::cout << std::endl;
}
return 0;}
XML 常包含属性和多层嵌套。TinyXML-2 提供了方便的方法访问这些内容。
假设 XML 内容如下:
<books>
<book id="1" category="tech">
<title>C++ Primer</title>
<author>Stanley B. Lippman</author>
</book>
<book id="2" category="ai">
<title>Deep Learning</title>
<author>Ian Goodfellow</author>
</book>
</books>
解析代码示例:
const XMLElement* book = root->FirstChildElement("book");
for (; book != nullptr; book = book->NextSiblingElement("book")) {
const char* id = book->Attribute("id");
const char* category = book->Attribute("category");
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">const char* title = book->FirstChildElement("title")->GetText();
const char* author = book->FirstChildElement("author")->GetText();
std::cout << "ID: " << id
<< ", 类别: " << category
<< ", 书名: " << title
<< ", 作者: " << author << std::endl;}
TinyXML-2 也支持创建新的 XML 并保存到文件。
XMLDocument newDoc;
<p>// 创建根节点
auto* root = newDoc.NewElement("config");
newDoc.InsertEndChild(root);</p><p>// 添加子节点
auto* option = newDoc.NewElement("option");
option->SetAttribute("name", "fullscreen");
option->SetText("true");
root->InsertEndChild(option);</p><p>// 保存到文件
XMLError result = newDoc.SaveFile("output.xml");
if (result == XML_SUCCESS) {
std::cout << "XML 文件已保存!" << std::endl;
}
除了 TinyXML-2,还有几个常用的 C++ XML 解析库:
对于中小型项目,TinyXML-2 因其简单易用、零依赖而成为首选。
基本上就这些。只要掌握 LoadFile、RootElement、FirstChildElement、NextSiblingElement、Attribute 和 GetText 这些核心接口,就能应对大多数 XML 解析需求。
以上就是c++++中如何解析XML文件_TinyXML2等XML解析库使用方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号