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日

相关文章

  • python中urllib.unquote乱码的原因与解决方法

    下面我将详细讲解“Python 中 urllib.unquote 乱码的原因与解决方法”的攻略。 问题描述 在 Python 中使用 urllib.unquote 对 URL 解码时,有时会出现乱码的问题,如下所示: import urllib url = ‘https://www.example.com/%E6%88%91%E6%98%AF%E4%B8%A…

    html 2023年5月31日
    00
  • 两台电脑如何直连传输文件?两台电脑直连传输文件详细操作教程

    以下是“两台电脑如何直连传输文件?两台电脑直连传输文件详细操作教程”的完整攻略: 两台电脑如何直连传输文件?两台电脑直连传输文件详细操作教程 有时候,我们需要将文件从一台电脑传输到另一台电脑,但是没有网络连接或者网络连接不稳定。这时候,我们可以使用直连方式传输文件。下面是两台电脑直连传输文件的详细操作教程。 两台电脑直连传输文件的步骤 准备一根网线:用户需要…

    html 2023年5月18日
    00
  • HTML 5 预览

    HTML 5 是一种新的 HTML 规范,它具有许多新的功能和标签,旨在使Web开发更加简单和流畅。然而,HTML 5 并不是一个单一的技术,它由一系列标准组成,包括 HTML 、CSS 和 JavaScript。在这篇 Markdown 文章中,我们将探讨 HTML 5 预览的详细攻略。 什么是HTML 5 预览 HTML 5 预览是指在开发中使用 HTM…

    html 2023年5月30日
    00
  • 小程序使用wxs解决wxml保留2位小数问题

    下面我来详细讲解“小程序使用wxs解决wxml保留2位小数问题”的完整流程和示例。 1. 问题说明 在小程序中,如果需要对数字进行保留2位小数的操作,通常会使用toFixed()方法。但是,如果直接在wxml中使用该方法,会出现一些问题。例如,{{0.1.toFixed(2)}}的结果会是0.10,而不是我们期望的0.1。 2. 解决方法 为了解决这个问题,…

    html 2023年5月30日
    00
  • 在Python中处理XML的教程

    在Python中处理XML的教程 什么是XML? XML是一种常用的表示和交换数据的格式。它是一种标记语言,与HTML类似,但没有预定义的标签集。相反,XML允许开发者定义适合自己应用程序的自定义标签。 以下是一个示例XML文档: <?xml version="1.0" encoding="UTF-8"?>…

    html 2023年5月30日
    00
  • Win10连接远程桌面的时候提示您的凭证不工作该怎么办?

    以下是iOS 8越狱安装iFile插件的攻略: 下载安装Cydia:在iOS 8设备上进行越狱后,您需要下载安装Cydia应用商店。您可以在越狱工具中选择安装Cydia。 打开Cydia:在安装完成Cydia后,打开Cydia应用。 搜索iFile插件:在Cydia应用中,搜索“iFile”插件。 安装iFile插件:在搜索到iFile插件后,点击“安装”按…

    html 2023年5月17日
    00
  • Java实现解析并生成xml原理实例详解

    Java实现解析并生成xml原理实例详解 简介 XML是一种可扩展标记语言,常用于数据的存储和传输。XML的一个重要的应用场景是作为数据传输的格式,即数据序列化。 Java提供了许多支持XML的API,其中常用的是DOM和SAX。 DOM:将XML文件整个加载到内存中,并生成与XML结构对应的DOM树,可以方便的通过节点操作修改XML内容。但是会占用大量的内…

    html 2023年5月30日
    00
  • 怎么找回qq历史头像?qq历史头像的找回办法

    如果您在QQ上更改了头像,但是想要找回之前的历史头像,以下是找回QQ历史头像的详细攻略: 步骤1:打开QQ 打开QQ软件。 登录您的QQ账号。 步骤2:进入QQ空间 单击QQ主界面上的“空间”按钮。 进入您的QQ空间。 步骤3:查看历史头像 单击QQ空间页面上的“相册”按钮。 找到“头像相册”。 单击“头像相册”。 查看您之前使用过的历史头像。 步骤4:设置…

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