首页 > 后端开发 > C++ > 正文

c++怎么解析XML文件_c++XML数据读取与DOM解析教程

下次还敢
发布: 2025-11-10 16:03:02
原创
353人浏览过
使用tinyxml2库可轻松实现C++中XML文件的DOM解析。首先将tinyxml2.h和cpp文件加入项目,然后通过XMLDocument加载文件,获取根节点后遍历book元素,利用Attribute和GetText方法提取id、title、author、price及currency等信息,适合处理中小型XML文件。

c++怎么解析xml文件_c++xml数据读取与dom解析教程

在C++中解析XML文件,常用的方法是使用第三方库来读取和操作XML数据。原生C++标准库并不支持XML解析,因此开发者通常借助像 tinyxml2pugixmlXerces-C++ 这样的库。本文以 tinyxml2 为例,介绍如何读取XML文件并使用DOM方式解析内容。

1. tinyxml2 简介与安装

tinyxml2 是一个轻量级、易于使用的C++ XML解析库,采用DOM(Document Object Model)方式加载整个XML文档到内存中,适合处理中小型XML文件。

你可以从其 GitHub 仓库下载:https://github.com/leethomason/tinyxml2

使用方法:

立即学习C++免费学习笔记(深入)”;

  • 将 tinyxml2.h 和 tinyxml2.cpp 添加到你的项目中
  • 在编译时包含这两个文件即可

2. 基本XML结构示例

假设我们有如下XML文件(example.xml):

巧文书
巧文书

巧文书是一款AI写标书、AI写方案的产品。通过自研的先进AI大模型,精准解析招标文件,智能生成投标内容。

巧文书 61
查看详情 巧文书
<?xml version="1.0" encoding="UTF-8"?>
<library>
  <book id="1">
    <title>C++ Primer</title>
    <author>Stanley Lippman</author>
    <price currency="USD">59.99</price>
  </book>
  <book id="2">
    <title>Effective C++</title>
    <author>Scott Meyers</author>
    <price currency="EUR">45.00</price>
  </book>
</library>
登录后复制

3. 使用 tinyxml2 解析XML文件

下面是一个完整的C++程序,演示如何读取上述XML文件,并提取每本书的信息:

#include <iostream>
#include "tinyxml2.h"
<p>using namespace tinyxml2;
using namespace std;</p><p>int main() {
XMLDocument doc;
XMLError result = doc.LoadFile("example.xml");</p><pre class='brush:php;toolbar:false;'>if (result != XML_SUCCESS) {
    cout << "无法加载XML文件!错误代码:" << result << endl;
    return -1;
}

// 获取根节点
XMLNode* root = doc.FirstChild();
if (!root) {
    cout << "根节点为空!" << endl;
    return -1;
}

// 遍历所有 book 子节点
for (XMLElement* book = root->FirstChildElement("book");
     book != nullptr;
     book = book->NextSiblingElement("book")) {

    // 获取属性 id
    const char* id = book->Attribute("id");

    // 获取子元素文本
    const char* title = book->FirstChildElement("title")->GetText();
    const char* author = book->FirstChildElement("author")->GetText();

    XMLElement* priceElem = book->FirstChildElement("price");
    const char* price = priceElem->GetText();
    const char* currency = priceElem->Attribute("currency");

    cout << "ID: " << id << ", ";
    cout << "书名: " << title << ", ";
    cout << "作者: " << author << ", ";
    cout << "价格: " << price << " " << currency << endl;
}

return 0;
登录后复制

}

4. 关键API说明

  • XMLDocument::LoadFile():加载XML文件,返回错误码
  • FirstChildElement("tag"):获取第一个指定标签的子元素
  • NextSiblingElement("tag"):遍历同级的下一个同名元素
  • Attribute("name"):获取元素的属性值
  • GetText():获取元素的文本内容

注意:所有返回的字符串指针由tinyxml2内部管理,不要手动释放。如需长期保存,应复制为std::string。

基本上就这些。tinyxml2简单直观,适合大多数C++项目的XML读取需求。对于更复杂的场景(如命名空间、大文件流式处理),可考虑 pugixml 或 Xerces-C++。但对新手来说,tinyxml2是入门DOM解析的最佳选择。

以上就是c++++怎么解析XML文件_c++XML数据读取与DOM解析教程的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号