利用 Qt 讀取 XML 檔案的方法
XML 是可擴充套件標記語言(Extensible Markup Language)的縮寫。XML 檔案由內容和標記組成,通過以標記包圍內容的方式將大部分內容包含在元素中。
Qt 中提供了多種讀取XML檔案的方法,這裡簡單的記錄一下用 QDomDocument 讀取的步驟。為什麼使用QDomDocument 呢,因為XML 本身就是一以樹狀結構組織資料的,而DOM 也是將資料組織為樹狀結構,最適合直觀地展示XML資料。
下面的程式碼是Qt 幫助檔案中自帶的例子程式碼:
- QDomDocument doc("mydocument");
-
QFile file("mydocument.xml"
- if (!file.open(QIODevice::ReadOnly))
- return;
- if (!doc.setContent(&file))
- {
- file.close();
- return;
- }
- file.close();
- // print out the element names of all elements that are direct children
- // of the outermost element.
-
QDomElement docElem = doc.documentElement();
- QDomNode n = docElem.firstChild();
- while (!n.isNull())
- {
- QDomElement e = n.toElement(); // try to convert the node to an element.
- if (!e.isNull())
- {
- cout << qPrintable(e.tagName()) << endl; // the node really is an element.
- }
-
n = n.nextSibling();
- }
如果xml有多層,那麼可以遞迴的去讀取。我寫了小程式將xml 的的資料讀入到一個樹型列表控制元件中。下面是核心的程式碼:
- #ifndef DIALOG_H
- #define DIALOG_H
- #include <QtXml>
- #include <QDialog>
- namespace Ui {
- class Dialog;
- }
- class QTreeWidgetItem;
- class Dialog : public QDialog
- {
- Q_OBJECT
- public:
- explicit Dialog(QWidget *parent = 0);
- void listDom(QDomElement& docElem, QTreeWidgetItem* pItem);
- void openXML(QString fileName);
- ~Dialog();
- private:
- Ui::Dialog *ui;
- private slots:
- void openFile();
- };
- #endif // DIALOG_H
- #include "dialog.h"
- #include "ui_dialog.h"
- #include <QFileDialog>
- Dialog::Dialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::Dialog)
- {
- ui->setupUi(this);
- connect(ui->pushButtonOpen, SIGNAL(clicked()), this, SLOT(openFile()));
- ui->treeWidget->setColumnCount(2);
- ui->treeWidget->setColumnWidth(0, 400);
- setWindowFlags(Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowMinimizeButtonHint);
- showMaximized();
- }
- void Dialog::openXML(QString fileName)
- {
- QFile file(fileName);
- if(file.open(QIODevice::ReadOnly))
- {
- QDomDocument dom("WCM");
- if (dom.setContent(&file))
- {
- ui->treeWidget->clear();
- QDomElement docElem = dom.documentElement();
- listDom(docElem, NULL);
- }
- }
- file.close();
- }
- void Dialog::openFile()
- {
- QString fileName = QFileDialog::getOpenFileName(this, tr("Open XML File"), "c:/", tr("XML Files (*.xml)"));
- if(!fileName.isEmpty())
- {
- openXML( fileName );
- }
- }
- Dialog::~Dialog()
- {
- delete ui;
- }
- void Dialog::listDom(QDomElement& docElem, QTreeWidgetItem * pItem)
- {
- QDomNode node = docElem.firstChild();
- if(node.toElement().isNull())
- {
- pItem->setText (1, docElem.text());
- }
- while(!node.isNull())
- {
- QDomElement element = node.toElement(); // try to convert the node to an element.
- if( !element.isNull() )
- {
- QTreeWidgetItem *item;
- if( pItem )
- {
- item = new QTreeWidgetItem(pItem);
- }
- else
- {
- item = new QTreeWidgetItem(ui->treeWidget);
- }
-
相關推薦
利用 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