利用 Qt 读取 XML 文件的方法

XML

Qt

下面的代码是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();}

如果

#ifndef DIALOG_H#define DIALOG_H#include <QtXml>#include <QDialog>namespace Ui {class Dialog;}class QTreeWidgetItem;class Dialog : public QDialog{Q_OBJECTpublic: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-8"?><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>

下面是软件界面:

,三亚呀——赴一个蓝天碧海。只是微笑地固执自己的坚持,

利用 Qt 读取 XML 文件的方法

相关文章:

你感兴趣的文章:

标签云: