本文件用 QDomDocument 读取XML文件
XML文件路径:D:\Test\qt\xml\test.xml 内容:
- <?xml version="1.0" encoding="GBK" ?>
- <Root>
- <Test Attr="属性">金财税</Test>
- </Root>
1、新建一个Qt工程,命名为xml。
2、在xml.pro文件加入一句 Qt += xml
3、在界面上放一个PushButton和一个TextEdit
main.cpp
- #include <QtGui/QApplication>
- #include "mainwindow.h"
- //为了正常显示中文,手动加入以下引用
- #include <QTextCodec>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- //手动加入以下代码,保证中文可以正常显示
- QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
- QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
- QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
- MainWindow w;
- w.show();
- return a.exec();
- }
在PushButton的clicked()槽中写读取xml的代码
mainwindow.cpp
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- //以下是手工添加的引用
- #include <QDomDocument>
- #include <QDomElement>
- #include <QDomAttr>
- #include <QFile>
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::on_pushButton_clicked()
- {
- QFile file("D:/Test/qt/xml/test.xml");
- if(!file.open(QFile::ReadOnly | QFile::Text))
- {
- ui->textEdit->append(tr("XML文件打开失败"));
- }
- QDomDocument doc;
- QString errStr;
- int errLine, errCol;
- // setContent 是将指定的内容指定给QDomDocument 解析,第一参数可以是QByteArray或者是文件名等。
- if(!doc.setContent(&file, false, &errStr, &errLine, &errCol))
- {
- ui->textEdit->append(tr("指定XML内容失败 原因: ") + errStr);
- }
- file.close();
- //根节点
- QDomElement root = doc.documentElement();
- ui->textEdit->append(root.nodeName());///输出根节点名称 输出 Root
- QDomElement child = root.firstChildElement();
- ui->textEdit->append(child.nodeName());//输出内容: Test
- ui->textEdit->append(child.text());//child.nodeValue()无值,原因不明 输出内容: 金财税
- ui->textEdit->append(child.attributeNode("Attr").nodeName());//输出内容: Attr
- ui->textEdit->append(child.attributeNode("Attr").nodeValue());//输出内容: 属性
- }
运行结果:
在上一节的工程中加入一个按钮,在按钮的clicked()槽中加入以下代码:
- void MainWindow::on_pushButton_2_clicked()
- {
- QFile file("C:/new.xml");
- if(!file.open(QFile::WriteOnly | QFile::Text))
- {
- ui->textEdit->append(tr("文件打开失败"));
- }
- QDomDocument doc;
- doc.appendChild(doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"GBK\""));
- //根节点
- QDomElement root = doc.createElement("Root");
- doc.appendChild(root);
- //子节点
- QDomElement child = doc.createElement("Test");
- QDomText text = doc.createTextNode(tr("金财税"));// child.setNodeValue(tr("金财税"))的方法无效果,原因不明
- child.appendChild(text);
- child.setAttribute("Attr", "属性");
- root.appendChild(child);
- //输入XML文件
- QTextStream out(&file);
- doc.save(out, 4);//这里的4暂时不知道是什么意思
- file.close();
- }
还需要在源文件头部加入引用:
- #include <QTextStream>
如果执行成功,会在C盘里找到new.xml文件,文件内容如下:
- <?xml version="1.0" encoding="GBK"?>
- <Root>
- <Test Attr="属性">金财税</Test>
- </Root>
本文出自 “自由自我” 博客,请务必保留此出处http://hhuayuan.blog.51cto.com/1630327/898419