QT之xml文件的读写
- 简介
- 用法举例
简介
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;
}