1. 程式人生 > >qt 開發過程中使用DOM方式讀取XML檔案

qt 開發過程中使用DOM方式讀取XML檔案

本來沒打算記錄這個過程,QT讀取XML的方法,網上相關的博文很多,也比我的詳細,我也是參考其他大神的,但是在這過程中涉及檔案路徑操作,讓我費了點周折,

畢竟初學QT,很多不熟悉的地方。

我將XML以絕對路徑操作成功後(XML檔案內容很簡單,所有讀取這個XML也不難)想實現相對路徑方法讀取,那肯定得操作目錄了,在這個過程中問題比較多,因此記錄一下

我的過程,建立一個工程,並在類中增加

boolparseXML(constQString&filename);函式(其實在操作的過程中我是忽略他的引數了,具體看下文)
#include"widget.h"
#include"ui_widget.h"
#include<QDomDocument>
#include<QFile>
#include<QDebug>
#include<QDomElement>
#include<QTableWidgetItem>
#include<QDebug>
#include<QDir>
Widget::Widget(QWidget*parent):
QWidget(parent),
ui(newUi::Widget)
{
ui->setupUi(this);
parseXML("contact.xml");
}
Widget
::~Widget()
{
deleteui;
}
boolWidget::parseXML(constQString&filename)
{
QDomDocumentdoc;//學習檔案操作知識
boolRes;
#ifdefABSOLUTEPATH
QFilefile("F:/QT/QTTest/ReadXML/ReadXML/contact.xml");//絕對路徑
#else //相對路徑
QDirmy_dir2(my_dir2.currentPath());
qDebug()<<my_dir2.dirName();
my_dir2.cdUp();//跳轉到上層目錄
qDebug()<<my_dir2.dirName();
Res=my_dir2.cd("ReadXML");//進入DirTest目錄
//顯示該目錄下的所有檔案和資料夾
foreach(QFileInfomy_info,my_dir2.entryInfoList())
{
if(my_info.isDir())
qDebug()<<"Dir:"<<my_info.absoluteFilePath();
if(my_info.isFile())
qDebug()<<"File:"<<my_info.absoluteFilePath();
}
qDebug()<<my_dir2.absolutePath();//顯示當前的完整路徑
QFilefile(my_dir2.absolutePath()+"/contact.xml");//相對路徑訪問
#endif
if(!file.open(QIODevice::ReadOnly))
{
qDebug()<<"openfile"<<filename<<"filed";
returnfalse;
}
QStringstrError;
intErrLine;
intErrCount;
if(!doc.setContent(&file,&strError,&ErrLine,&ErrCount))
{
qDebug()<<"parsexmlerror:"<<strError<<"line"<<ErrLine<<"col"<<ErrCount;
file.close();
returnfalse;
}
file.close();
QDomElementelement=doc.documentElement().firstChildElement("people");
quint8ROW,COL;
ROW=0;
COL=0;
while(!element.isNull())
{
ui->tableWidget->setItem(ROW,COL,newQTableWidgetItem(element.attribute("name")));
QDomElementChild=element.firstChildElement("mobile");
if(!Child.isNull())
{
ui->tableWidget->setItem(ROW,COL+1,newQTableWidgetItem(Child.text()));
}
element=element.nextSiblingElement("people");
ROW++;
}
returntrue;
}