Qt操作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());//输出内容: 属性 

运行结果:

 

 

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

 

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

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

 

 
 
  1. #include <QTextStream> 

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

 

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

 

 

本文出自 “自由自我” 博客,请务必保留此出处http://hhuayuan.blog.51cto.com/1630327/898419

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值