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日

相关文章

  • PHP截取汉字乱码问题解决方法mb_substr函数的应用

    下面是详细的“PHP截取汉字乱码问题解决方法mb_substr函数的应用”的攻略: 1. 问题背景 在使用PHP编写网页或者应用时,经常需要对字符串进行截取。但是对于包含中文字符的字符串,采用普通的截取方法会导致乱码的问题。这时可以使用PHP内置函数mb_substr()来解决这个问题。 2. mb_substr函数 mb_substr()函数是PHP中专门…

    html 2023年5月31日
    00
  • 非常不错的WAP常见问题问答大全(二)

    “WAP常见问题问答大全(二)”是一篇关于WAP开发中常见问题解答的技术文章。该文章主要涉及WAP应用开发、WAP网站优化、WML语言、WAP协议等方面的问题。下面是本人对于该文章的详细讲解: 标题 文章的标题是“非常不错的WAP常见问题问答大全(二)”,该标题比较简洁明了,而且能够准确描述文章的内容。 内容概括 文章的内容主要分为九个部分。其中第一个部分是…

    html 2023年5月30日
    00
  • Xpath语法格式总结

    Xpath语法格式总结 Xpath(XML Path Language)是一门用于在XML文档中定位节点的语言,也被用于HTML文档中的Web页面抓取。下面详细讲解Xpath语法的使用格式。 基本语法 Xpath中主要有两种路径表达式:绝对路径和相对路径。 绝对路径 绝对路径由根节点开始,通过逐级指定节点的名称来描述节点的路径,以下为绝对路径的格式: /pa…

    html 2023年5月30日
    00
  • C#写入XML文档

    下面就分享一下C#写入XML文档的完整攻略,包括几个方面: 引用命名空间 首先需要引用System.Xml命名空间,它包含了C#中使用XML的基本类和方法。 using System.Xml; 创建XML文档对象 在C#中,可以通过XmlDocument类创建一个XML文档对象。创建文档对象的代码如下: XmlDocument xmlDoc = new Xm…

    html 2023年5月30日
    00
  • Android 创建与解析XML(四)——详解Pull方式

    对于“Android 创建与解析XML(四)——详解Pull方式”这个话题,我会进行以下几方面的讲解: Pull方式解析XML文件的特点和基本原理 Pull解析XML的主要API以及使用方式 Pull方式解析XML的示例详解 1. Pull方式解析XML文件的特点和基本原理 在Android中,解析XML文件主要有三种方式:DOM方式、SAX方式和Pull方…

    html 2023年5月30日
    00
  • Android应用中使用XmlSerializer序列化XML数据的教程

    下面是详细讲解“Android应用中使用XmlSerializer序列化XML数据的教程”的完整攻略: 简介 XmlSerializer是Android平台中用于将Java对象序列化为XML格式的工具类。使用XmlSerializer可以将Java对象转换为满足特定格式要求的XML数据流,便于传输、存储和解析。 使用步骤 使用XmlSerializer进行X…

    html 2023年5月30日
    00
  • 改进性能和样式的 24个 ASP 技巧第1/2页

    下面是“改进性能和样式的24个ASP技巧”攻略的详细讲解: 1. 使用缓存来提高网站性能 在ASP程序中,使用缓存可以显著提高网站性能。通过将反复获取的数据存储在缓存中,可以减少数据库查询的次数,从而减轻服务器的负担。在ASP中使用缓存非常简单,只需要调用Cache对象即可。下面是一个例子: <% ‘从数据库中获取数据 Dim rsData Set r…

    html 2023年5月30日
    00
  • 怎么在快手开直播赚钱?怎么赚钱?

    以下是“怎么在快手开直播赚钱?怎么赚钱?”的完整攻略: 怎么在快手开直播赚钱?怎么赚钱? 快手是一款非常流行的短视频平台,用户可以在平台上发布自己的短视频,并通过直播等方式赚钱。下面是在快手开直播赚钱的攻略。 成为快手达人 成为快手达人是获得收益的前提条件之一。快手达人是指在快手上有一定影响力的用户,他们的短视频和直播可以吸引更多的用户观看和关注。成为快手达…

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