一、XML文件
<?xml version="1.0" encoding="UTF-8"?>
<Begin><Type name="zhangsan"><sex>boy</sex><school>Chengdu</school><age>18</age><special>handsome</special></Type><Type name="lisi"><sex>boy</sex><school>Xian</school><age>19</age><special>ugly</special></Type>
</Begin>
<?xml version="1.0" encoding="UTF-8"?>版本說明與編號
“Begin”根節點,可以理解為一級目錄
”TypeX“是子節點,可以理解為二級目錄;”name“是屬性,”zhangsan“是屬性值
“sex”“school”等是三級節點,可以理解為三級目錄;”girl“”“Xian”等是文本;
二、QT中的QDomDocument類
使用時需要添加xml模塊。
qt幫助手冊簡單例子
三、實際代碼操作讀寫操作
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QFile>
#include <QDomDocument>
#include <QDebug>
#include <QMessageBox>
#include <QFileDialog>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;private:void my_xml_read();void my_xml_write();
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//xml讀寫my_xml_read();my_xml_write();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::my_xml_read()
{QDomDocument doc("info");QFile file(":/info.xml");if (!file.open(QIODevice::ReadOnly))return;if (!doc.setContent(&file))//將文件與DomDocument關聯{file.close();return;}file.close();QDomElement firstElem = doc.documentElement();//獲取到了<begin>一級目錄qDebug()<<"一級目錄<begin>: "<<firstElem.nodeName();QDomNodeList secondList = firstElem.childNodes();//獲取全部二級目錄<Type1><Type2><Typ3>for (int i = 0; i < secondList.count(); ++i) {QString str = QString(" 第 %1 個二級目錄節點:").arg(i+1);qDebug()<<str.toUtf8().data()<<secondList.at(i).nodeName();//將QString轉換成char *,使用qDebug輸出沒有引號QDomElement secondElem = secondList.at(i).toElement();//獲取二級目錄節點的屬性值管理者domElementif(secondElem.hasAttribute("name")){//輸出二級目錄節點的屬性值qDebug()<<" "<<secondElem.nodeName().append("的屬性值name為").toUtf8().data()<<secondElem.attribute("name");}else{qDebug()<<" "<<secondElem.nodeName().append("該節點無屬性值").toUtf8().data();}QDomNodeList thirdList = secondList.at(i).childNodes();//獲取三級目錄<具體值></具體值>for(int j = 0;j<thirdList.length();j++ ){QDomElement thirdElement=thirdList.at(j).toElement();QString str_1 = QString(" %1中第 %2 個三級目錄節點 %3,他的文本值為 %4:").arg(secondList.at(i).nodeName(),QString::number(j+1),thirdList.at(j).nodeName(),thirdElement.text());qDebug()<<str_1.toUtf8().data();//將QString轉換成char *,使用qDebug輸出沒有引號}}
}void MainWindow::my_xml_write()
{//add instructionQDomDocument doc;QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");//寫xml中的第一行說明doc.appendChild(instruction);//add 第一級目錄節點QDomElement firstNode = doc.createElement("Begin");doc.appendChild(firstNode);//add 第二級目錄節點QDomElement secondNode = doc.createElement("Type");//為二級目錄添加屬性值QDomAttr secondAttr = doc.createAttribute("MyLover");secondAttr.setValue("lr");secondNode.setAttributeNode(secondAttr);firstNode.appendChild(secondNode);//一級目錄下添加二級節點//add 第三級目錄節點 添加text文本值QDomElement thirdNode_1 = doc.createElement("sex");secondNode.appendChild(thirdNode_1);QDomText t1 = doc.createTextNode("girl");thirdNode_1.appendChild(t1);QDomElement thirdNode_2 = doc.createElement("school");secondNode.appendChild(thirdNode_2);QDomText t2 = doc.createTextNode("Chengdu");thirdNode_2.appendChild(t2);QDomElement thirdNode_3 = doc.createElement("age");secondNode.appendChild(thirdNode_3);QDomText t3 = doc.createTextNode("28");thirdNode_3.appendChild(t3);QDomElement thirdNode_4 = doc.createElement("special");secondNode.appendChild(thirdNode_4);QDomText t4 = doc.createTextNode("beautiful");thirdNode_4.appendChild(t4);QString fileName = QFileDialog::getSaveFileName(this,"Save xml file","../my_xml","xml(*.xml)");if(fileName.isEmpty()){return;}QFile myFile(fileName);bool ret =myFile.open(QIODevice::WriteOnly|QIODevice::Text);if(!ret){QMessageBox::warning(this,"warning","保存文件失敗!");return;}QTextStream stream(&myFile);//使用QTextStream類與文件關聯進行保存xml!stream.setCodec("UTF-8");//編碼格式doc.save(stream,4);//4代表的是縮進個數myFile.close();QMessageBox::information(this,"save tip","xml文件保存成功!");
}
四、項目運行
與寫操作寫的信息一致