Qt DOM读写XML文件
QXmlStreamReader:一種快速的基于流的方式訪問(wèn)良格式 XML 文檔,特別適合于實(shí)現(xiàn)一次解析器(所謂“一次解析器”,可以理解成我們只需讀取文檔一次,然后像一個(gè)遍歷器從頭到尾一次性處理 XML 文檔,期間不會(huì)有反復(fù)的情況,也就是不會(huì)讀完第一個(gè)標(biāo)簽,然后讀第二個(gè),讀完第二個(gè)又返回去讀第一個(gè),這是不允許的);
DOM(Document Object Model):將整個(gè) XML 文檔讀入內(nèi)存,構(gòu)建成一個(gè)樹(shù)結(jié)構(gòu),允許程序在樹(shù)結(jié)構(gòu)上向前向后移動(dòng)導(dǎo)航,這是與另外兩種方式最大的區(qū)別,也就是允許實(shí)現(xiàn)多次解析器(對(duì)應(yīng)于前面所說(shuō)的一次解析器)。DOM 方式帶來(lái)的問(wèn)題是需要一次性將整個(gè) XML 文檔讀入內(nèi)存,因此會(huì)占用很大內(nèi)存;
SAX(Simple API for XML):提供大量虛函數(shù),以事件的形式處理 XML 文檔。這種解析辦法主要是由于歷史原因提出的,為了解決 DOM 的內(nèi)存占用提出的(在現(xiàn)代計(jì)算機(jī)上,這個(gè)一般已經(jīng)不是問(wèn)題了)。
XML文件如下:
<?xml version='1.0' encoding='UTF-8'?> <china><beijing><haidian><university><peking><cs><name>奧巴馬</name></cs></peking></university></haidian></beijing> </china>?Qt解析代碼如下:
QDomDocument doc;QDomElement root;QString filename = "D:\\Qt Projects\\TestXML_1\\demo.xml";QFile file(filename);if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){QMessageBox::critical(this, "文件打開(kāi)失敗", QString("不能打開(kāi)文件:%1").arg(filename));return;}QString error;int errrow, errcol;if(!doc.setContent(&file, false, &error, &errrow, &errcol)){QMessageBox::critical(this, "文件解析失敗",QString("解析錯(cuò)誤行:%1, 列:%2:%3").arg(errrow).arg(errcol).arg(error));file.close();return;}root = doc.documentElement();file.close();QString path = "china/beijing/haidian/university/peking/cs/name";QStringList strlist = path.split("/");QDomElement element = root;for(int i=1; i<strlist.count(); i++){element = element.firstChildElement(strlist.at(i));}qDebug() << element.nodeName() << "\t" << element.text();運(yùn)行結(jié)果:
22:58:14: Starting D:\Qt Projects\build-TestXML_1-Desktop_Qt_6_0_3_MinGW_64_bit-Debug\debug\TestXML_1.exe ... "name" "奧巴馬" 22:58:17: D:\Qt Projects\build-TestXML_1-Desktop_Qt_6_0_3_MinGW_64_bit-Debug\debug\TestXML_1.exe exited with code 0總結(jié)
以上是生活随笔為你收集整理的Qt DOM读写XML文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++编程语言之Lambda函数与表达式
- 下一篇: Qt编程之QTreeWidget使用方法