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>
*/