多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

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

利用 Qt 讀取 XML 文件的方法

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

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视频在线观看 | 中国明星freesexhd图片 | 玖玖在线视频 | 国产一国产一级毛片视频在线 | 亚洲跨种族黑人xxx 亚洲老女人 | 欧美黑人乱大交 | 精品国产一区二区三区2021 | 欧美艳星xxx | 中文字幕爱爱 | 最近最新中文字幕高清免费 | 亚洲欧美另类日韩 | 日本亚洲欧美美色 | 欧洲亚洲综合一区二区三区 | 最近免费中文字幕大全视频 | 性xxxxfreexxxxx国产| 中文字幕在线观看亚洲 | 国产不卡视频一区二区在线观看 | 91精品国产综合久久久久 | 成 人 a v黄 色 | 欧美色爽| 开操网| 国产成人咱精品视频免费网站 | 大色欧美| 亚洲天堂网址 | 欧美高清在线精品一区二区不卡 | www亚洲天堂 | 日韩欧美精品 | 欧美精欧美乱码一二三四区 | 国产成人精品一区二区免费视频 | 亚洲精品国产第一区二区三区 | xxxxx大片在线观看 | 国产a不卡片精品免费观看 国产a国产片色老头 | 亚洲乱码一二三四区国产 | 卡通动漫第一页 | 亚洲美女视频网站 | 日本中文字幕在线观看视频 | 武则天免费一级淫片 | 亚洲免费黄网 | 天天狠狠弄夜夜狠狠躁·太爽了 |