[Qt教程] 第30篇 XML(四)使用流读写XML
生活随笔
收集整理的這篇文章主要介紹了
[Qt教程] 第30篇 XML(四)使用流读写XML
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
[Qt教程]?第30篇 XML(四)使用流讀寫XML
??|?查看: 611|?回復(fù): 0| 使用流讀寫XML 版權(quán)聲明 該文章原創(chuàng)于作者yafeilinux,轉(zhuǎn)載請(qǐng)注明出處! 導(dǎo)語 ? ?? ??從Qt 4.3開始引入了兩個(gè)新的類來讀取和寫入XML文檔:QXmlStreamReader和QXmlStreamWriter。?QXmlStreamReader類提供了一個(gè)快速的解析器通過一個(gè)簡(jiǎn)單的流API來讀取格式良好的XML文檔,它是作為Qt的SAX解析器的替代品的身份出現(xiàn)的,因?yàn)樗?/span>SAX解析器更快更方便。QXmlStreamReader可以從QIODevice或者QByteArray中讀取數(shù)據(jù)。流讀取器的基本原理就是將XML文檔報(bào)告為一個(gè)記號(hào)(tokens)流,這一點(diǎn)與SAX相似,而它們的不同之處在于XML記號(hào)被報(bào)告的方式。在SAX中,應(yīng)用程序必須提供處理器(回調(diào)函數(shù))來從解析器獲得所謂的XML事件;而對(duì)于QXmlStreamReader,是應(yīng)用程序代碼自身來驅(qū)動(dòng)循環(huán),在需要的時(shí)候可以從讀取器中一個(gè)接一個(gè)的拉出記號(hào)。這個(gè)是通過調(diào)用readNext()函數(shù)實(shí)現(xiàn)的,它可以讀取下一個(gè)記號(hào),然后返回一個(gè)記號(hào)類型,然后可以使用isStartElement()和text()等函數(shù)來判斷這個(gè)記號(hào)是否包含我們需要的信息。使用這種主動(dòng)拉取記號(hào)的方式的最大的好處就是可以構(gòu)建遞歸解析器,也就是可以在不同的函數(shù)或者類中來處理XML文檔中的不同記號(hào)。 環(huán)境:Windows Xp + Qt 4.8.4+Qt Creator2.6.2 目錄 一、解析XML文檔 二、寫入XML文檔 正文 一、解析XML文檔 1.新建Qt控制臺(tái)應(yīng)用,項(xiàng)目名稱為myXmlStream,完成后將myXmlStream.pro文件的第一行代碼更改為: QT? ?? ??+= core??xml 然后保存該文件。 2.然后打開main.cpp文件,將內(nèi)容更改如下: 二、寫入XML文檔 與QXmlStreamReader對(duì)應(yīng)的是QXmlStreamWriter,它通過一個(gè)簡(jiǎn)單的流API提供了一個(gè)XML寫入器。QXmlStreamWriter的使用是十分簡(jiǎn)單的,只需要調(diào)用相應(yīng)的記號(hào)的寫入函數(shù)來寫入相關(guān)數(shù)據(jù)即可。 將前面主函數(shù)的內(nèi)容更改為: int?main(int?argc,?char?*argv[]) { ? ??QCoreApplication?a(argc,?argv); ? ??QFile?file("../myXmlStream/my2.xml"); ? ??if?(!file.open(QFile::WriteOnly?|?QFile::Text)) ? ??{ ? ?? ??qDebug()?<<?"Error: cannot open file"; ? ?? ??return?1; ? ??} ? ??QXmlStreamWriter?stream(&file); ? ??stream.setAutoFormatting(true); ? ??stream.writeStartDocument(); ? ??stream.writeStartElement("bookmark"); ? ??stream.writeAttribute("href",?"http://qt.nokia.com/"); ? ??stream.writeTextElement("title",?"Qt Home"); ? ??stream.writeEndElement(); ? ??stream.writeEndDocument(); ? ??file.close(); ? ??qDebug()?<<?"write finished!"; ? ??return?a.exec(); } 這里使用了setAutoFormatting(true)函數(shù)來自動(dòng)設(shè)置格式,這樣會(huì)自動(dòng)換行和添加縮進(jìn)。然后使用了writeStartDocument(),該函數(shù)會(huì)自動(dòng)添加首行的XML說明(即<?xmlversion="1.0" encoding="UTF-8"?>),添加元素可以使用writeStartElement(),不過,這里要注意,一定要在元素的屬性、文本等添加完成后,使用writeTextElement()來關(guān)閉前一個(gè)打開的元素。在最后使用writeEndDocument()來完成文檔的寫入。現(xiàn)在大家可以運(yùn)行程序了,這時(shí)會(huì)在項(xiàng)目目錄中生成一個(gè)XML文檔。 結(jié)語 數(shù)據(jù)庫和XML在很多程序中都經(jīng)常用到,它們的使用也總是和數(shù)據(jù)的顯示聯(lián)系起來,所以學(xué)習(xí)好數(shù)據(jù)庫的知識(shí)也是很重要的,它們可以說是密不可分的。相關(guān)內(nèi)容,大家也可以參考《Qt Creator快速入門》的相關(guān)章節(jié)以及《Qt 及Qt Quick開發(fā)實(shí)戰(zhàn)精解》的數(shù)據(jù)管理系統(tǒng)的例子,里面同時(shí)應(yīng)用了數(shù)據(jù)庫和XML。 涉及到的源碼:??myXmlStream.zip?? |
總結(jié)
以上是生活随笔為你收集整理的[Qt教程] 第30篇 XML(四)使用流读写XML的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Qt教程] 第23篇 数据库(三)利用
- 下一篇: asp.net ajax控件工具集 Au