加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Qt操作XML例子

发布时间:2020-12-16 05:19:15 所属栏目:百科 来源:网络整理
导读:本文件用 QDomDocument 读取XML文件 XML文件路径: D:Testqtxmltest.xml 内容 : ? xml version = "1.0" encoding = "GBK" ? Root Test Attr = "属性" 金财税 / Test / Root 1、新建一个Qt工程,命名为xml。 2、在xml.pro文件加入一句 Qt += xml 3、在界

本文件用QDomDocument读取XML文件

XML文件路径:D:Testqtxmltest.xml内容

 
 
  1. <?xmlversion="1.0"encoding="GBK"?>
  2. <Root>
  3. <TestAttr="属性">金财税</Test>
  4. </Root>

1、新建一个Qt工程,命名为xml。

2、在xml.pro文件加入一句 Qt += xml

3、在界面上放一个PushButton和一个TextEdit

main.cpp

 
 
  1. #include<QtGui/QApplication>
  2. #include"mainwindow.h"
  3. //为了正常显示中文,手动加入以下引用
  4. #include<QTextCodec>
  5. intmain(intargc,char*argv[])
  6. {
  7. QApplicationa(argc,argv);
  8. //手动加入以下代码,保证中文可以正常显示
  9. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
  10. QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
  11. QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
  12. MainWindoww;
  13. w.show();
  14. returna.exec();
  15. }

在PushButton的clicked()槽中写读取xml的代码

mainwindow.cpp

 
 
  1. #include"mainwindow.h"
  2. #include"ui_mainwindow.h"
  3. //以下是手工添加的引用
  4. #include<QDomDocument>
  5. #include<QDomElement>
  6. #include<QDomAttr>
  7. #include<QFile>
  8. MainWindow::MainWindow(QWidget*parent):
  9. QMainWindow(parent),
  10. ui(newUi::MainWindow)
  11. {
  12. ui->setupUi(this);
  13. }
  14. MainWindow::~MainWindow()
  15. {
  16. deleteui;
  17. }
  18. voidMainWindow::on_pushButton_clicked()
  19. {
  20. QFilefile("D:/Test/qt/xml/test.xml");
  21. if(!file.open(QFile::ReadOnly|QFile::Text))
  22. {
  23. ui->textEdit->append(tr("XML文件打开失败"));
  24. }
  25. QDomDocumentdoc;
  26. QStringerrStr;
  27. interrLine,errCol;
  28. //setContent是将指定的内容指定给QDomDocument解析,第一参数可以是QByteArray或者是文件名等。
  29. if(!doc.setContent(&file,false,&errStr,&errLine,&errCol))
  30. {
  31. ui->textEdit->append(tr("指定XML内容失败原因:")+errStr);
  32. }
  33. file.close();
  34. //根节点
  35. QDomElementroot=doc.documentElement();
  36. ui->textEdit->append(root.nodeName());///输出根节点名称输出Root
  37. QDomElementchild=root.firstChildElement();
  38. ui->textEdit->append(child.nodeName());//输出内容:Test
  39. ui->textEdit->append(child.text());//child.nodeValue()无值,原因不明输出内容:金财税
  40. ui->textEdit->append(child.attributeNode("Attr").nodeName());//输出内容:Attr
  41. ui->textEdit->append(child.attributeNode("Attr").nodeValue());//输出内容:属性
  42. }

运行结果:

在上一节的工程中加入一个按钮,在按钮的clicked()槽中加入以下代码:

 
 
  1. voidMainWindow::on_pushButton_2_clicked()
  2. {
  3. QFilefile("C:/new.xml");
  4. if(!file.open(QFile::WriteOnly|QFile::Text))
  5. {
  6. ui->textEdit->append(tr("文件打开失败"));
  7. }
  8. doc.appendChild(doc.createProcessingInstruction("xml","version="1.0"encoding="GBK""));
  9. //根节点
  10. QDomElementroot=doc.createElement("Root");
  11. doc.appendChild(root);
  12. //子节点
  13. QDomElementchild=doc.createElement("Test");
  14. QDomTexttext=doc.createTextNode(tr("金财税"));//child.setNodeValue(tr("金财税"))的方法无效果,原因不明
  15. child.appendChild(text);
  16. child.setAttribute("Attr","属性");
  17. root.appendChild(child);
  18. //输入XML文件
  19. QTextStreamout(&file);
  20. doc.save(out,4);//这里的4暂时不知道是什么意思
  21. file.close();
  22. }

还需要在源文件头部加入引用:

 
 
  1. #include<QTextStream>

如果执行成功,会在C盘里找到new.xml文件,文件内容如下:

 
 
  1. <?xmlversion="1.0"encoding="GBK"?>
  2. </Root>

本文出自 “自由自我” 博客,请务必保留此出处http://www.52php.cn/article/p-aqqehpit-ev.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读