简介
QT的QDomDocument、QDomElement、QDomNode是Qt XML模块中的三个类,用于解析和操作XML文档。
1)QDomDocument类:
QDomDocument类表示整个XML文档。它提供了解析XML文档的方法,如setContent()和setContent(),以及生成XML文档的方法,如toByteArray()和toString()。
QDomDocument类还包括一些常用的操作,如创建新元素(createElement())、创建新文本节点(createTextNode())和创建新注释(createComment())。
2. QDomElement类:
QDomElement类表示XML文档中的一个元素。它提供了获取和设置元素名称(tagName()和setTagName())、获取和设置元素属性(attribute()和setAttribute())以及获取和设置元素文本内容(text()和setText())的方法。
QDomElement类还包括一些用于遍历和操作子元素的方法,如firstChildElement()、lastChildElement()、nextElementSibling()和previousElementSibling()。这些方法可以方便地遍历元素的子元素和兄弟元素。
3. QDomNode类:
QDomNode类表示XML文档中的一个节点,可以是元素、文本节点或注释等。它提供了一些基本的方法,如获取节点类型(nodeType())、获取节点名称(nodeName())和获取节点值(nodeValue())。
QDomNode类还包括一些用于遍历节点的方法,如firstChild()、lastChild()、nextSibling()和previousSibling()。这些方法可以方便地遍历节点的子节点和兄弟节点。
用法举例
首先,我们假设有一个名为"example.xml"的XML文件,其内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<name>John Doe</name>
<age>30</age>
<email>johndoe@example.com</email>
</data>
1)读取XML文件:
#include <QCoreApplication>
#include <QFile>
#include <QDomDocument>
#include <QDomElement>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString fileName = "example.xml";
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly)) {
qDebug() << "Failed to open file:" << fileName;
return -1;
}
QDomDocument doc;
if (!doc.setContent(&file)) {
qDebug() << "Failed to parse XML file:" << fileName;
file.close();
return -1;
}
file.close();
QDomElement root = doc.documentElement();
QDomNode n = root.firstChild();
while (!n.isNull()) {
QDomElement e = n.toElement();
if (!e.isNull()) {
qDebug() << e.tagName() << ":" << e.text();
}
n = n.nextSibling(); // 获取下一个子节点
}
return 0;
}
2)写入XML文件:
#include <QCoreApplication>
#include <QFile>
#include <QDomDocument>
#include <QDomElement>
#include <QTextStream>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString fileName = "output.xml";
QDomDocument doc;
QDomElement root = doc.createElement("data");
doc.appendChild(root);
QDomElement nameElement = doc.createElement("name");
nameElement.appendChild(doc.createTextNode("John Doe"));
root.appendChild(nameElement);
QDomElement ageElement = doc.createElement("age");
ageElement.appendChild(doc.createTextNode("30"));
root.appendChild(ageElement);
QDomElement emailElement = doc.createElement("email");
emailElement.appendChild(doc.createTextNode("johndoe@example.com"));
root.appendChild(emailElement);
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qDebug() << "Failed to open file:" << fileName;
return -1;
}
QTextStream stream(&file);
doc.save(stream, 4); // 设置缩进为4个空格
file.close();
return 0;
}