Qt笔记(3)操作XML一

本文件用 QDomDocument 读取XML文件

XML文件路径:D:\Test\qt\xml\test.xml 内容

 

  
  
  
  
  1. <?xml version="1.0" encoding="GBK" ?>   
  2. <Root>   
  3.     <Test Attr="属性">金财税</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. //为了正常显示中文,手动加入以下引用 
  5. #include <QTextCodec> 
  6.  
  7. int main(int argc, char *argv[]) 
  8.     QApplication a(argc, argv); 
  9.  
  10.     //手动加入以下代码,保证中文可以正常显示 
  11.     QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK")); 
  12.     QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK")); 
  13.     QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); 
  14.  
  15.     MainWindow w; 
  16.     w.show(); 
  17.      
  18.     return a.exec(); 

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

mainwindow.cpp

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

运行结果:

 

 

你可能感兴趣的:(xml,qt,qt教程)