C++、Qt分别读写xml文件的方法实例

在C++及Qt中,读写XML文件是一项常见的任务。下面分别介绍C++和Qt中读写XML的方法及其实现,包括如何使用第三方库、如何解析XML文件的基本组成部分。

C++中读写XML文件

C++中可以使用第三方库TinyXML来读写XML文件。下面介绍如何使用TinyXML进行XML文件读写。

1、创建XML文件

要写入XML文件,首先需要文件句柄。然后创建XML节点和子节点,并将它们插入到文件中。代码如下:

#include "tinyxml.h"
int main()
{
    TiXmlDocument doc;
    TiXmlDeclaration *pDeclaration = new TiXmlDeclaration("1.0", "utf-8", "yes");
    TiXmlElement *pRootElement = new TiXmlElement("Root");
    doc.LinkEndChild(pDeclaration);
    doc.LinkEndChild(pRootElement);

    // 创建第一个子节点
    TiXmlElement *pElement = new TiXmlElement("ChildNode1");
    pElement->LinkEndChild(new TiXmlText("Content of the ChildNode1 tag"));
    pRootElement->LinkEndChild(pElement);

    // 创建第二个子节点
    pElement = new TiXmlElement("ChildNode2");
    pElement->SetAttribute("attribute", "the attribute value");
    pElement->LinkEndChild(new TiXmlText("Content of the ChildNode2 tag"));
    pRootElement->LinkEndChild(pElement);

    doc.SaveFile("new_file.xml"); // 保存XML文件
    return 0;
}

可以看到,这里首先创建了一个XML文档对象doc,并在其中添加了声明节点和根节点pRootElement。然后,我们创建了两个子节点pElement1和pElement2,并使用LinkEndChild方法将它们添加到根节点pRootElement中。pElement1没有额外的属性,所以只需要添加一个text子节点。pElement2有一个名为“attribute”的属性,所以我们使用SetAttribute方法来设置该属性。

2、读取XML文件

要读取XML文件,需要先打开文件句柄,然后遍历XML节点,并获取其中的内容和属性。代码如下:

#include "tinyxml.h"
#include <iostream>
int main()
{
    TiXmlDocument doc("new_file.xml");
    bool isLoaded = doc.LoadFile(); // 加载XML文件
    if (!isLoaded)
    {
        std::cout << "Could not load the XML file." << std::endl;
        return -1;
    }

    TiXmlElement *pRootElement = doc.RootElement();
    TiXmlElement *pElem = pRootElement->FirstChildElement();
    while (pElem)
    {
        std::cout << pElem->Value() << std::endl;
        const char *pText = pElem->GetText();
        if (pText)
        {
            std::cout << "Text: " << pText << std::endl;
        }
        TiXmlAttribute *pAttribute = pElem->FirstAttribute();
        while (pAttribute)
        {
            std::cout << pAttribute->Name() << " = " << pAttribute->Value() << std::endl;
            pAttribute = pAttribute->Next();
        }
        pElem = pElem->NextSiblingElement();
    }
    return 0;
}

我们首先用TiXmlDocument类的LoadFile方法加载XML文件。然后,我们检查XML文件是否成功加载。如果没有加载成功,我们就输出一条错误消息并退出程序。否则,我们取得根节点pRootElement,然后以FirstChildElement方法开始遍历其子节点。对于每个节点,我们输出其名称(Value);如果该节点有文本内容,我们输出其文本内容(GetText)。我们还遍历了节点的属性,输出它们的名称(Name)和值(Value)。

Qt中读写XML文件

在Qt中,可以使用QXmlStreamReader和QXmlStreamWriter两个类来读写XML文件。下面介绍如何使用这两个类进行XML文件读写。

1、创建XML文件

要写入XML文件,我们创建QFile对象并打开文件,然后创建QXmlStreamWriter对象并设置文件输出流。我们可以创建XML节点和子节点,并把它们写入到文件中。代码如下:

#include <QFile>
#include <QXmlStreamWriter>
int main()
{
    QFile file("new_file.xml");
    if (!file.open(QFile::WriteOnly | QFile::Truncate))
        return -1;

    QXmlStreamWriter xmlWriter(&file);

    xmlWriter.setAutoFormatting(true);
    xmlWriter.writeStartDocument();
    xmlWriter.writeStartElement("Root");

    // 创建第一个子节点
    xmlWriter.writeStartElement("ChildNode1");
    xmlWriter.writeCharacters("Content of the ChildNode1 tag");
    xmlWriter.writeEndElement();

    // 创建第二个子节点
    xmlWriter.writeStartElement("ChildNode2");
    xmlWriter.writeAttribute("attribute", "the attribute value");
    xmlWriter.writeCharacters("Content of the ChildNode2 tag");
    xmlWriter.writeEndElement();

    xmlWriter.writeEndElement();
    xmlWriter.writeEndDocument();

    file.close();
    return 0;
}

可以看到,我们首先打开文件new_file.xml,并创建了QXmlStreamWriter对象xmlWriter,并设置了其自动格式化属性为true。然后,我们使用writeStartDocument方法写入XML声明,并使用writeStartElement写入根节点。然后,我们使用writeStartElement创建每个子节点,使用writeAttributes设置其属性,使用writeCharacters写入内容,最后使用writeEndElement结束该子节点。以此类推,直到我们结束最后一个子节点并使用writeEndElement结束根节点。我们最后调用writeEndDocument方法来结束XML文件。

2、读取XML文件

要读取XML文件,我们创建QFile对象并打开文件,然后创建QXmlStreamReader对象并设置文件输入流。我们可以遍历XML节点,并获取其中的内容和属性。代码如下:

#include <QFile>
#include <QXmlStreamReader>
#include <QDebug>
int main()
{
    QFile file("new_file.xml");
    if (!file.open(QFile::ReadOnly | QFile::Text))
        return -1;

    QXmlStreamReader xmlReader(&file);

    while (!xmlReader.atEnd() && !xmlReader.hasError())
    {
        QXmlStreamReader::TokenType token = xmlReader.readNext();
        if (token == QXmlStreamReader::StartElement)
        {
            qDebug() << "Element:" << xmlReader.name();

            if (xmlReader.attributes().count() > 0)
            {
                qDebug() << "Attributes:";
                QXmlStreamAttributes attributes = xmlReader.attributes();
                for (int i = 0; i < attributes.count(); i++)
                {
                    qDebug() << attributes.at(i).name() << " = " << attributes.at(i).value();
                }
            }
        }
        else if (token == QXmlStreamReader::Characters && !xmlReader.isWhitespace())
        {
            qDebug() << "Text:" << xmlReader.text().toString();
        }
    }

    file.close();
    return 0;
}

我们首先打开文件,然后创建QXmlStreamReader对象xmlReader,并设置其为文件输入流。我们在循环中使用readNext方法读取每个XML节点,并根据节点的类型进行处理。对于每个StartElement节点,我们调用name方法来输出其名称,并检查它是否有属性(attributes)。如果有属性,我们使用attributes方法获得这些属性,并输出它们的名称(name)和值(value)。对于Characters节点,我们使用text方法获得文本内容,并打印出来。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++、Qt分别读写xml文件的方法实例 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • JavaScript实现异步获取表单数据

    JavaScript实现异步获取表单数据的过程可以使用XMLHttpRequest对象和Promise对象实现,以下是具体步骤: 获取表单DOM元素 在页面中获取表单DOM元素,可以使用document.querySelector或者document.getElementById等方法获取表单元素。 const form = document.querySe…

    html 2023年5月30日
    00
  • 抖音电脑版如何下载安装?抖音电脑版下载安装方法

    以下是“抖音电脑版如何下载安装?抖音电脑版下载安装方法”的完整攻略: 抖音电脑版如何下载安装? 抖音电脑版是一款在电脑上使用抖音的应用程序,可以让用户在电脑上观看和上传抖音视频。如果需要下载安装抖音电脑版,可以按照以下步骤进行: 下载安装包:在浏览器中搜索“抖音电脑版下载”,找到可靠的下载网站,下载抖音电脑版的安装包。 安装抖音电脑版:双击安装包,按照提示完…

    html 2023年5月18日
    00
  • 华为一镜到底支持机型有哪些? 华为一镜到底主题设置技巧

    以下是“华为一镜到底支持机型有哪些? 华为一镜到底主题设置技巧”的完整攻略: 华为一镜到底支持机型有哪些? 华为一镜到底主题设置技巧 华为一镜到底是一款非常受欢迎的相机应用,它可以实现一镜到底的效果,让用户可以轻松拍摄高质量的照片。以下是关于华为一镜到底支持机型和主题设置技巧的详细攻略。 华为一镜到底支持机型 华为一镜到底支持的机型如下: 华为P30 Pro…

    html 2023年5月18日
    00
  • 开始菜单中我最近的文档怎么快速清空?

    以下是“开始菜单中我最近的文档怎么快速清空?”的完整攻略: 开始菜单中我最近的文档怎么快速清空? 在Windows操作系统中,开始菜单中的“我最近的文档”可以记录用户最近打开的文件,方便用户快速访问。但是,有时候用户可能需要清空这个列表,以保护自己的隐私或者提高系统性能。下面是清空“我最近的文档”列表的具体操作。 步骤1:打开“运行”窗口 用户需要按下“Wi…

    html 2023年5月18日
    00
  • log4j使用详细解析

    Log4j使用详细解析 Log4j是Java中常用的日志框架,可以用于控制日志输出的格式、级别、输出目的地等。本文将详细讲解Log4j的使用方法。 1. 引入Log4j依赖 在maven项目中,我们可以在pom.xml中添加以下依赖来引入Log4j: <dependency> <groupId>org.apache.logging.l…

    html 2023年5月30日
    00
  • html5 input属性使用示例

    HTML5为我们带来了很多新的表单属性,这里将会分享一些常见的input属性使用示例,并且演示如何使用这些属性。 1. placeholder属性 这个属性定义一个控件的预期值的一个提示文本,即控件的内容/值的预期格式或值,但不必是尖括号、括号之类的限定符或完整的文本格式。实现方式如下: <input type="text" pla…

    html 2023年5月30日
    00
  • XML实体注入深入理解

    XML实体注入(XML Entity Injection)是一种针对XML解析器的攻击,攻击者在注入的参数中精心构造恶意实体,从而诱导应用程序将敏感数据泄露给攻击者。下面将对XML实体注入进行深入的分析和攻略。 什么是XML实体注入 XML实体注入是通过向XML数据中插入恶意实体或修改已有实体来诱导XML解析器执行意想不到的操作的攻击技术。XML解析过程中会…

    html 2023年5月30日
    00
  • JavaScript获取XML数据附示例截图

    让我来为您详细讲解一下“JavaScript获取XML数据”的完整攻略。 前言 在本篇攻略中,我们将通过 JavaScript 来获取并解析 XML 数据。为了帮助您更好地理解,我们将结合代码和截图进行说明。 步骤一:创建 XMLHttpRequest 对象 使用 JavaScript 获取 XML 数据的第一步是创建一个 XMLHttpRequest 对象…

    html 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部