Qt_XML

XML

要链接到 XML 模块,需要在 qmake 项目文件 .pro 中添加:

QT += xml
包含模块中类的定义,使用:

#include <QtXml>

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

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

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

#include "myxml.h"
#include<QTextStream>
/*
 * write xml document
*/

MyXml::MyXml(QWidget *parent)
    : QWidget(parent)
{
    QDomDocument doc("mydocument");
    QDomElement root = doc.createElement("MyXml");
    doc.appendChild(root);

    QDomElement tag = doc.createElement("Greeting");
    root.appendChild(tag);

    QDomElement name=doc.createElement("img");
    tag.appendChild(name);
    name.setAttribute("src","myimage.png");

    QDomText t = doc.createTextNode("Hello World");
    name.appendChild(t);


    QString xml = doc.toString();
    QFile file("myxml.xml");
    if(!file.open(QIODevice::WriteOnly))
    {
        file.close();
        return;
    }
    QTextStream infile(&file);
    infile<<xml;
    file.close();

}
/*
 *  myxml.xml
<!DOCTYPE mydocument>
<MyXml>
 <Greeting>
  <img src="myimage.png">Hello World</img>
 </Greeting>
</MyXml>
*/
MyXml::MyXml(QWidget *parent)
    : QWidget(parent)
{
    QDomDocument doc("mydocument");
    QFile file("myxml.xml");
    if(!file.open(QIODevice::WriteOnly))
    {
        file.close();
        return;
    }
    QXmlStreamWriter writer(&file);
    writer.setCodec("UTF-8");          //XML编码
    writer.setAutoFormatting(true); // 自动格式化
    writer.writeStartDocument("1.0", true);       // 开始文档(XML 声明)
    writer.writeComment("我只是一个小小的注释...");  // 注释
    writer.writeProcessingInstruction("xml-stylesheet type=\"text/css\" href=\"style.css\"");  // 处理指令
//    writer.writeDTD("");
    writer.writeStartElement("body");
    writer.writeAttribute("Version","1.0");
        writer.writeStartElement("p");
            writer.writeTextElement("label1","zylg1");
            writer.writeTextElement("label2","zylg2");
            writer.writeTextElement("label3","zylg3");
            writer.writeTextElement("label4","zylg4");
        writer.writeEndDocument();
    writer.writeEndDocument();
    file.close();
}
/*
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--我只是一个小小的注释...-->
<?xml-stylesheet type="text/css" href="style.css"?>
<body Version="1.0">
    <p>
        <label1>zylg1</label1>
        <label2>zylg2</label2>
        <label3>zylg3</label3>
        <label4>zylg4</label4>
    </p>
</body>
*/

猜你喜欢

转载自blog.csdn.net/qq_33564134/article/details/85017937