1. 程式人生 > >利用 Qt 讀取 XML 檔案的方法

利用 Qt 讀取 XML 檔案的方法

XML 是可擴充套件標記語言(Extensible Markup Language)的縮寫。XML 檔案由內容和標記組成,通過以標記包圍內容的方式將大部分內容包含在元素中。

Qt 中提供了多種讀取XML檔案的方法,這裡簡單的記錄一下用 QDomDocument 讀取的步驟。為什麼使用QDomDocument 呢,因為XML 本身就是一以樹狀結構組織資料的,而DOM 也是將資料組織為樹狀結構,最適合直觀地展示XML資料。

下面的程式碼是Qt 幫助檔案中自帶的例子程式碼:

  1. QDomDocument doc("mydocument");  
  2. QFile file("mydocument.xml"
    );  
  3. if (!file.open(QIODevice::ReadOnly))  
  4.     return;  
  5. if (!doc.setContent(&file))  
  6. {  
  7.     file.close();  
  8.     return;  
  9. }  
  10. file.close();  
  11. // print out the element names of all elements that are direct children
  12. // of the outermost element.
  13. QDomElement docElem = doc.documentElement();  
  14. QDomNode n = docElem.firstChild();  
  15. while (!n.isNull())  
  16. {  
  17.     QDomElement e = n.toElement(); // try to convert the node to an element.
  18.     if (!e.isNull())      
  19.     {  
  20.         cout << qPrintable(e.tagName()) << endl; // the node really is an element.
  21.     }  
  22.     n = n.nextSibling();  
  23. }  

如果xml有多層,那麼可以遞迴的去讀取。我寫了小程式將xml 的的資料讀入到一個樹型列表控制元件中。下面是核心的程式碼:

  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include <QtXml>
  4. #include <QDialog>
  5. namespace Ui {  
  6. class Dialog;  
  7. }  
  8. class QTreeWidgetItem;  
  9. class Dialog : public QDialog  
  10. {  
  11.     Q_OBJECT  
  12. public:  
  13.     explicit Dialog(QWidget *parent = 0);  
  14.     void listDom(QDomElement& docElem, QTreeWidgetItem* pItem);  
  15.     void openXML(QString fileName);  
  16.     ~Dialog();  
  17. private:  
  18.     Ui::Dialog *ui;  
  19. private slots:  
  20.     void openFile();  
  21. };  
  22. #endif // DIALOG_H

  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. #include <QFileDialog>
  4. Dialog::Dialog(QWidget *parent) :  
  5.     QDialog(parent),  
  6.     ui(new Ui::Dialog)  
  7. {  
  8.     ui->setupUi(this);  
  9.     connect(ui->pushButtonOpen, SIGNAL(clicked()), this, SLOT(openFile()));  
  10.     ui->treeWidget->setColumnCount(2);  
  11.     ui->treeWidget->setColumnWidth(0, 400);  
  12.     setWindowFlags(Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint);  
  13.     showMaximized();  
  14. }  
  15. void Dialog::openXML(QString fileName)  
  16. {  
  17.     QFile file(fileName);  
  18.     if(file.open(QIODevice::ReadOnly))  
  19.     {  
  20.         QDomDocument dom("WCM");  
  21.         if (dom.setContent(&file))  
  22.         {  
  23.             ui->treeWidget->clear();  
  24.             QDomElement docElem = dom.documentElement();  
  25.             listDom(docElem, NULL);  
  26.         }  
  27.     }  
  28.     file.close();  
  29. }  
  30. void Dialog::openFile()  
  31. {  
  32.     QString fileName = QFileDialog::getOpenFileName(this, tr("Open XML File"), "c:/", tr("XML Files (*.xml)"));  
  33.     if(!fileName.isEmpty())  
  34.     {  
  35.         openXML( fileName );  
  36.     }  
  37. }  
  38. Dialog::~Dialog()  
  39. {  
  40.     delete ui;  
  41. }  
  42. void Dialog::listDom(QDomElement& docElem, QTreeWidgetItem * pItem)  
  43. {  
  44.     QDomNode node = docElem.firstChild();  
  45.     if(node.toElement().isNull())  
  46.     {  
  47.         pItem->setText (1, docElem.text());  
  48.     }  
  49.     while(!node.isNull())  
  50.     {  
  51.         QDomElement element = node.toElement(); // try to convert the node to an element.
  52.         if( !element.isNull() )  
  53.         {  
  54.             QTreeWidgetItem *item;  
  55.             if( pItem )  
  56.             {  
  57.                 item = new QTreeWidgetItem(pItem);  
  58.             }  
  59.             else
  60.             {  
  61.                 item = new QTreeWidgetItem(ui->treeWidget);  
  62.             }  
  63. 相關推薦

    利用 Qt 讀取 XML 檔案方法

    XML 是可擴充套件標記語言(Extensible Markup Language)的縮寫。XML 檔案由內容和標記組成,通過以標記包圍內容的方式將大部分內容包含在元素中。 Qt 中提供了多種讀取XML檔案的方法,這裡簡單的記錄一下用 QDomDocument 

    使用dom4j四種讀取xml檔案方法

    原文地址:http://blog.163.com/chenhui_java/blog/static/172672494201092632424462/ 以下是四種讀取xml檔案的方式,每種都有自己的用處。這是我在寫日誌管理器的時候查詢到的。希望能給大家幫助 首先我們先給出一個

    QT讀取XML檔案三種方式 的例項

    第一部分:QXmlStreamReader XML(eXtensible Markup Language)是一種通用的文字格式,被廣泛運用於資料交換和資料儲存(雖然近年來 JSON 盛行,大有取代 XML 的趨勢,但是對於一些已有系統和架構,比如 WebService,由於歷史原因,仍舊會繼

    java讀取xml檔案的四種方法

    1 import javax.xml.parsers.SAXParser; 2 import javax.xml.parsers.SAXParserFactory; 3 4 import org.xml.sax.Attributes; 5 import org.x

    C++ 利用string讀取txt檔案方法

    #include<iostream> #include<string> #include<fstream> using namespace std; int main() { cout<<"input the filenam

    Dom4J讀取XML檔案時出現的connection timed out:connect Nested exception異常解決方法

    最近在專案中實現一個雙資料庫的動態讀取樹形選單功能,通過了Dom4J來實現,執行過程中出現以下問題: 在本論壇查到原因為 dom4j會去拿DTD增加那些DOCTYPE的預設屬性,因此加入下面一段話即可。 解決辦法連結http://topic.csdn.ne

    C#中常用的幾種讀取XML檔案方法

     XML檔案是一種常用的檔案格式,例如WinForm裡面的app.config以及Web程式中的web.config檔案,還有許多重要的場所都有它的身影。Xml是Internet環境中跨平臺的,依賴於內容的技術,是當

    java讀取XML檔案內容的方法

    xml檔案內容: <?xml version="1.0" encoding="UTF-8"?> <DigitalEnvelope>     <Channel id="BANK" privatekey="A1JTQe4Q94krAfR1POTxY

    XPath在QT中的使用(QXmlQuery讀取XML檔案

      最近一段時間和Xml檔案算是幹上了,先後用了QXmlStream、Dom、Dhtmlxtree、DhtmlXform方式讀寫Xml檔案。昨天接到任務讓用Xpath方式實現Xml讀取。經過了解在QT中有QxmlQuery類用來實現XPath,接下來就說說這個東東! 1.

    Java+Selenium3方法篇44-利用opencsv讀取csv檔案

    前面介紹瞭如何讀取excel檔案,本篇介紹如何讀取vsc檔案,什麼是csv,它的定義是與逗號分隔的值(Comma-Separated Values),同樣的Java中需要用到第三方lib去處理讀取cs

    C#讀取XML檔案資料和把資料儲存至xml方法

    原文在百度知道中,來源於多個網友。 新浪微博:http://blog.sina.com.cn/s/blog_ad7fd0f4010180md.html (一) 儲存 var xml =XElement.Load(@"路徑");xml.Element("節點名字").AddA

    Qt-QML-C++互動實現檔案IO系統-後繼-讀取XML檔案和建立XML檔案

    在前面兩篇中,大致完成了一個檔案IO的讀和寫操作。前面兩篇文章連結 今天這個是,今天主要是寫了怎麼把配置檔案寫入到XML中 上今天的詳程式碼 QJsonObject DLFileIOSystem::DLReadXML() { qDebug()<&

    QT中使用tinyxml庫來讀取XML檔案失敗的經歷

    增加了一個配置項,XML節點名稱用的數字開頭的,如<11aa>0</11aa> 結果在儲存的時候能成功,但是讀取的時候一直load xml failed。 將其修改成<aa11>0</aa11>之後就好了 特此記錄!

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

    本來沒打算記錄這個過程,QT讀取XML的方法,網上相關的博文很多,也比我的詳細,我也是參考其他大神的,但是在這過程中涉及檔案路徑操作,讓我費了點周折, 畢竟初學QT,很多不熟悉的地方。 我將XML以絕對路徑操作成功後(XML檔案內容很簡單,所有讀取這個XML也不難)想實現

    讀取XML檔案DOM4J方法

    DOM4J DOM4J方法讀取XML檔案與DOM方法的區別就在於DOM4J方法不需要建立解析器工廠物件與解析器物件,可以直接讀取XML檔案,相比於DOM方法更簡潔一些,但需要先匯入jar包(類庫)。 例: import java.io.File; im

    java利用poi讀取Excel檔案

    java讀取Excel檔案,筆者認為:從結構上來看,Excel檔案是由一個一個的單元格組成的,有點像細胞cell,逐行的排列。那麼我們讀的時候也應該逐行逐行的讀,從左到右的尋找每一個cell。一、例項程式碼: 只是實現了一種方式,因為依照讀取內容的不同,讀取的後想要的操作不同,因此不能苟同全部,只是方法是相

    利用Iterator讀取cvs檔案

    平時讀取csv檔案都是用while迴圈,最近在看文件時發現一個新方法:利用iterator <?php namespace demo\test; use Iterator; class CsvFileIterator implements Iterator { private $fil

    怎麼利用PHP讀取Excel檔案資訊及內容

      PHPExcel是什麼?PHPExcel 就是一個用來操作Office Excel 文件的PHP類庫。在程式設計技術開發中,我們經常要從程式中讀取Excel檔案內容,不過很多初學者都不太會,那麼下面來詳細為大家分析解答一下吧。比如說一個普通的個人資訊表,我們利用PHPExcel類庫將Excel表格內的資訊

    python讀取xml檔案報錯xml.parsers.expat.ExpatError: XML or text declaration not at start of entity

    先說明一下我之前對python的xml.dom.minidom模組不熟,遇到這個問題時先想到的是百度,結果轉了一圈回來發現大家都寫的是xml檔案中的第一行,也就是 <?xml version="1.0" encoding="GBK"?> 這個可能沒有頂格寫,有空格。可是我遇到的問

    讀取XML檔案到DataSet示例

              /// <summary>         /// 讀取XML檔案   &nb