日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 利用 Qt 讀取 XML 文件的方法

利用 Qt 讀取 XML 文件的方法

來源:程序員人生   發布時間:2015-03-27 08:39:31 閱讀次數:5665次

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

Qt 中提供了多種讀取XML文件的方法,這里簡單的記錄1下用 QDomDocument 讀取的步驟。為何使用QDomDocument 呢,由于XML 本身就是1以樹狀結構組織數據的,而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 的的數據讀入到1個樹型列表控件中。下面是核心的代碼:

#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); } item->setText(0, element.tagName()); listDom(element, item); if( pItem ) { pItem->addChild(item); } else { ui->treeWidget->addTopLevelItem(item); } } node = node.nextSibling(); } return; }

下面是個測試 xml 文件:

<?xml version="1.0" encoding="UTF⑻"?> <recipe type="dessert"> <recipename cuisine="american" servings="1">Ice Cream Sundae</recipename> <ingredlist> <listitem> <quantity units="cups">0.5</quantity> <itemdescription>vanilla ice cream</itemdescription> </listitem> <listitem> <quantity units="tablespoons">3</quantity> <itemdescription>chocolate syrup or chocolate fudge</itemdescription> </listitem> <listitem> <quantity units="tablespoons">1</quantity> <itemdescription>nuts</itemdescription> </listitem> <listitem> <quantity units="each">1</quantity> <itemdescription>cherry</itemdescription> </listitem> </ingredlist> <utensils> <listitem> <quantity units="each">1</quantity> <utensilname>bowl</utensilname> </listitem> <listitem> <quantity units="each">1</quantity> <utensilname>spoons</utensilname> </listitem> <listitem> <quantity units="each">1</quantity> <utensilname>ice cream scoop</utensilname> </listitem> </utensils> <directions> <step>Using ice cream scoop, place vanilla ice cream into bowl.</step> <step>Drizzle chocolate syrup or chocolate fudge over the ice cream.</step> <step>Sprinkle nuts over the mound of chocolate and ice cream.</step> <step>Place cherry on top of mound with stem pointing upward.</step> <step>Serve.</step> </directions> <variations> <option>Replace nuts with raisins.</option> <option>Use chocolate ice cream instead of vanilla ice cream.</option> </variations> <preptime>5 minutes</preptime> </recipe>


下面是軟件界面:

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久久蜜臀 | 色又黄又爽网站www久久 | 精品视频在线一区 | 91精品国产综合久久久久久 | 黄色片免费在线观看 | 玖玖在线资源 | 欧美性受 | 国产激情在线观看 | 国产欧美精品一区二区色综合 | 黄色av免费在线观看 | 永久免费av网站 | 国产欧美日韩在线视频 | 久久久精| 亚洲一区二区三区精品视频 | 精品日韩在线观看 | 黄色一级片在线播放 | www精品美女久久久tv | 久久综合伊人77777 | 日韩国产欧美 | 一区二区三区回区在观看免费视频 | 91久久久久久久久久久 | 午夜精品福利一区二区三区蜜桃 | 成人激情视频在线观看 | 国产专区在线播放 | 国产一级片网站 | 国产欧美日韩在线视频 | 色婷婷国产精品免费网站 | 午夜性视频 | 日韩欧美成 | 国产一区二区三区在线视频 | 秋霞电影天堂 | 国产福利一区二区三区 | 成人在线视频一区二区 | 99re这里只有精品在线 | 人人爽视频 | 亚洲国产欧美在线 | 国产精品成人一区二区网站软件 | 天天干夜夜操 | 亚洲欧洲一区 | 国产精品video| 91精品国产综合久久精品图片 |