• 38初识xml


    XML(可扩展标记语言)是一种用于记录多种数据类型的标记语言。使用XML可以将各类型的文档定义为容易读取的格式,便于用户读取。而且,在应用程序中使用XML,可以轻松实现数据交换。

    QT中提供两种访问XML文档的方式:DOM和SAX。

    DOM方式:将XML文档转换为树形结果存储到内存中,再进行读取,消耗的内存比较多。此外,由于文档都已经存储到内存,所以需要频繁实现修改等操作时,使用起来比较方便。

    SAX方式:相比于DOM,SAX是一种速度更快,更有效的方法,它逐行扫描文档,一边扫描一边解析(由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中,这对于大型文档的解析是一个巨大优势。)而且相比于DOM,SAX可以在解析文档的任意时刻停止解析。但操作复杂,很难修改XML数据。

    本例只介绍DOM

    QT为DOM提供了用于操作XML的多种C++类,均以QDOM开头:

    类        描述

    QDomAttr, 表示一个QdomElement的属性              

    QDomCharacterData, 表示DOM中的一个通用字符串

    QDomDocument,     表示XML文档

    DomDocumentFragment,      QDomNodes树,通常不是一个完整地QDomDocument

    QDomDocumentType,   表示文档树中的DTD

    QDomElement,  表示DOM树中的一个元素

    QDomEntity,           代表一个XML实体

    QDomEntityReference,   代表一个XML实体引用

    QDomNode、               一个DOM树中所有节点的基类

    QDomNodeList、          QdomNode对象列表

    QDomNotation,            代表一个XML表示法

    QDomProcessingInstruction. 代表XML指令

    QDomText、                表示解析的XML文档中的文本数据

    重点:在.pro添加QT+=xml

    添加一个C++空文件,不需要继承任何基类。如下图:

    创建空的XML文件

    class DomXML

    {

    public:

        DomXML();

        static void CreateXML(QString strFilePath);

    };

    //创建空的xml文件

    void DomXML::CreateXML(QString strFilePath)

    {

        //打开文件

        QFile file(strFilePath);

        if(file.exists())

        {

            qDebug()<<"FilePath exists";

            return ;

        }

        else

        {

            bool bIsOk=file.open(QIODevice::WriteOnly);

            if(bIsOk)

            {//打开文件成功

                //创建xml文档对象

                QDomDocument doc;

                //创建xml头部格式<?xml version="1.0" encoding="UTF-8"?>

                QDomProcessingInstruction ins;

                ins=doc.createProcessingInstruction("xml","version="1.0" encoding="UTF-8"");

                //追加元素

                doc.appendChild(ins);

                //根节点元素

                QDomElement root=doc.createElement("日期销售清单");

                doc.appendChild(root);

                //保存

                QTextStream stream(&file);//文本流关联文件

                doc.save(stream,4); //4代表缩进4个字符

            }

            else

            {//文件打开失败

                qDebug()<<"open file error";

                return ;

            }

        }

    }

    调用:

    DomXML::CreateXML("../demo.xml");

    创建成功

  • 相关阅读:
    在面试中如何展示虚拟机和内存调优技能
    n年前,我没钱但年轻,我怕n年后我老时,还是一无所成——2017我的收获和反思
    如何在缺乏商业项目经验的前提下成功通过面试,兼说我如何甄别非商业项目经验
    从循环条件的代码里,我能在面试中甄别程序员是否是高级
    泛型的继承和通配符,同时归纳集合部分的面试点
    我短期内不会再到实体书店买书了,同时分析各种获取知识的方法
    分享升级架构师路上的体会,兼说我为什么有挣钱紧迫感
    累和加班多没时间都不是理由,再不挣钱就老啦
    对java多线程里Synchronized的思考
    工作2年进外企,不是难事,给出进外企的建议
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/9215892.html
Copyright © 2020-2023  润新知