Qt 读取XML文档的简单示例
目錄名字
- XML簡介
- Qt 操作XML文檔一般方法
- 使用DOM讀取XML文檔
- 示例代碼:讀取XML文檔
XML簡介
XML(Extensible Markup Language,可擴(kuò)展標(biāo)記語言)是一種類似于HTML的標(biāo)記語言,設(shè)計(jì)的目的是傳輸數(shù)據(jù),而不是顯示數(shù)據(jù)。
XML的標(biāo)簽沒有被預(yù)定義,用戶需要在使用時(shí)自定義。
XML使用的樹形結(jié)構(gòu)更能表現(xiàn)出數(shù)據(jù)的包含關(guān)系。
XML是一種文本文件格式,在信息存儲(chǔ)和描述領(lǐng)域非常流行。
Qt 操作XML文檔一般方法
Qt提供了QtXML模塊來進(jìn)行XML文檔的處理,這里提供了3種解析方法:
-
DOM方法,可以進(jìn)行讀和寫
-
SAX方法,可以進(jìn)行讀取
-
基于流的方法,QXmlStreamReader和QXmlStreamWriter進(jìn)行讀取和寫入。
Qt提供了更高級(jí)的QtXmlPatterns來進(jìn)行XML數(shù)據(jù)的查詢和操作。支持XQuery1.0和XPath2.0
使用DOM讀取XML文檔
DOM(Document Object Model,文檔對(duì)象模型),提供了一個(gè)接口來訪問和改變一個(gè)XML文件的內(nèi)容和結(jié)構(gòu),可以將XML文檔表示為一個(gè)存儲(chǔ)在內(nèi)存中具有層次的樹形圖。
文檔本身由QDOMDocument對(duì)象來表示,文檔中所有的DOM節(jié)點(diǎn)都是QDomNode類的子類。
Qt中使用QDomProcessingInstruction 類來表示XML說明。
XML文檔內(nèi)容有多個(gè)元素組成。元素對(duì)應(yīng)QDomElement類。
元素可以包含屬性。屬性對(duì)應(yīng)QDomAttr類。
元素可以包含子元素,也可以只包含文本內(nèi)容,文本內(nèi)容由QDomText類表示。
所有的DOM節(jié)點(diǎn),比如說明、元素、屬性、文本等都使用QDomNode來表示,然后使用對(duì)應(yīng)的isProcessingInstruction()、isElement()、isAttr()和isText()等函數(shù)來判斷是否是該類型的元素。如果是,就可以使用toProcessingInstruction()、toElement()、toAttribute()、toText()等函數(shù)轉(zhuǎn)化為具體的節(jié)點(diǎn)類型。
讀取XML文檔的一般步驟
1、打開 XML文件
2、新建QDomDocument 對(duì)象,將此對(duì)象命名,如命名為 doc
3、將文件內(nèi)容讀取到doc 中
4、關(guān)閉文件
5、對(duì)doc 進(jìn)行操作
示例代碼:讀取XML文檔
1、.pro 添加QT += XML2、#include<QXml>代碼示例:
#include <QtCore/QCoreApplication> #include <QtXml>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 新建QDomDocument類對(duì)象,它代表一個(gè)XML文檔QDomDocument doc;QFile file("../myDOM1/my.xml");if (!file.open(QIODevice::ReadOnly)) return 0;// 將文件內(nèi)容讀到doc中if (!doc.setContent(&file)) {file.close();return 0;}// 關(guān)閉文件file.close();// 獲得doc的第一個(gè)結(jié)點(diǎn),即XML說明QDomNode firstNode = doc.firstChild();// 輸出XML說明,nodeName()為“xml”,nodeValue()為版本和編碼信息qDebug() << qPrintable(firstNode.nodeName())<< qPrintable(firstNode.nodeValue());// 返回根元素QDomElement docElem = doc.documentElement();// 返回根節(jié)點(diǎn)的第一個(gè)子結(jié)點(diǎn)QDomNode n = docElem.firstChild();// 如果結(jié)點(diǎn)不為空,則轉(zhuǎn)到下一個(gè)節(jié)點(diǎn)while(!n.isNull()){// 如果結(jié)點(diǎn)是元素if (n.isElement()){// 將其轉(zhuǎn)換為元素QDomElement e = n.toElement();// 返回元素標(biāo)記和id屬性的值qDebug() << qPrintable(e.tagName())<< qPrintable(e.attribute("id"));// 獲得元素e的所有子結(jié)點(diǎn)的列表QDomNodeList list = e.childNodes();// 遍歷該列表for(int i=0; i<list.count(); i++){QDomNode node = list.at(i);if(node.isElement())qDebug() << " "<< qPrintable(node.toElement().tagName())<<qPrintable(node.toElement().text());}}// 轉(zhuǎn)到下一個(gè)兄弟結(jié)點(diǎn)n = n.nextSibling();}return a.exec(); }總結(jié)
以上是生活随笔為你收集整理的Qt 读取XML文档的简单示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt WebSocket服务端的简单De
- 下一篇: 使用Qt创建XML文档及XML文档的增删