自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Qt使用QDomDocument操作XML文件

移動(dòng)開發(fā)
QDomNode類是一個(gè)父類,QDomDocument是QDomNode的一個(gè)子類,鑒于大部分QDomNode的類型都是QDomDocument。.那么你可以使用toDocument()函數(shù)將QDomNode類型轉(zhuǎn)換成QDomDocument。

本文介紹的是在Qt使用QDomDocument類實(shí)現(xiàn)XML文件的操作,QDomNode類是一個(gè)父類,QDomDocument是QDomNode的一個(gè)子類,鑒于大部分QDomNode的類型都是QDomDocument。

XML,全稱為擴(kuò)展標(biāo)記語言(extensible markup language).是一種非常方便的數(shù)據(jù)交換工具?,F(xiàn)在Blog的訂閱系統(tǒng)輸出格式就是滿足XML規(guī)范的RSS格式,還有SVG矢量圖形也使用了XML格式。

我們在取得一個(gè)XML格式的文件后,需要作句法分析去提取發(fā)布方提供的信息。而QtXML提供了很好的支持,包括DOM的實(shí)現(xiàn)和SAX的實(shí)現(xiàn)。

DOM是Document Object Model的簡稱,其實(shí)現(xiàn)方式是將整個(gè)文檔當(dāng)作一個(gè)對(duì)象來裝入內(nèi)存進(jìn)行處理,然后開發(fā)者可以訪問這個(gè)對(duì)象中的每一個(gè)節(jié)點(diǎn),每一個(gè)節(jié)點(diǎn)對(duì)應(yīng)XML文件里的一個(gè)標(biāo)記。這種方式的優(yōu)點(diǎn)是操作非常簡單,缺點(diǎn)是需要將整個(gè)文件放入內(nèi)存,不適合處理過大文件。這種方式在Qt中的實(shí)現(xiàn)類是QDomDocument,也是本文將要講解的。以Blog為代表的RSS文件都不會(huì)很大,適合用這種方式來處理。

SAX是Simple API for XML的簡稱,其實(shí)現(xiàn)方式是按階段將文檔讀取到內(nèi)存中,在碰到標(biāo)簽或者其它階段的時(shí)候,調(diào)用開發(fā)者預(yù)先設(shè)計(jì)好的回調(diào)函數(shù)去處理。這種方式的缺點(diǎn)是需要開發(fā)者寫回調(diào)函數(shù)去處理不同標(biāo)簽,代碼復(fù)雜一些,優(yōu)點(diǎn)是能處理很大的XML文件。這種方式在Qt中的實(shí)現(xiàn)類叫QXmlStreamReader。

下面部分是代碼講解

(1)如果需要使用QDomDocument,那么請(qǐng)?jiān)谀愕捻?xiàng)目.pro文件里加上一句”QT += xml”,不然無法編譯通過。

(2)

  1. QDomDocument doc;  
  2. QFile file(”rss.xml”);  
  3. QString errorStr;  
  4. int errorLine;  
  5. int errorCol;  
  6. //setContent是將指定的內(nèi)容指定給QDomDocument解析,***參數(shù)可以是QByteArray或者是文件名等  
  7. if(!doc.setContent(&file,true,&errorStr,&errorLine,&errorCol))  
  8. {  
  9. //如果出錯(cuò),則會(huì)進(jìn)入這里。errorStr得到的是出錯(cuò)說明  
  10. //errorLine和errorCol則是出錯(cuò)的行和列  

如果上面的步驟沒出錯(cuò),那么恭喜你,你已經(jīng)得到了一個(gè)完整的QDomDocument對(duì)象doc,你只要訪問doc的子節(jié)點(diǎn)或子子節(jié)點(diǎn)就可以取得XML中所有標(biāo)記上的內(nèi)容了。

(3)

可以通過doc.childNodes()獲得doc的所有的子節(jié)點(diǎn)列表QDomNodeList。比如

  1. QDomNodeList list=doc.childNodes();  
  2. for(int i=0;i<list.count();i++){  
  3. QDomNode node=list.at(i);//好的風(fēng)格當(dāng)然是把定義寫在外面:(  
  4. //qDebug()<<”node name is “<<node.nodeName();  
  5. //qDebug()<<”node type is “<<.nodeType();  

通過上面的方法你就能知道每個(gè)節(jié)點(diǎn)的名字和類型了,節(jié)點(diǎn)名字就是標(biāo)記的名字。打印出來對(duì)照著xml文件看就很容易明白了。QDomNode類是一個(gè)父類,QDomDocument是QDomNode的一個(gè)子類,鑒于大部分QDomNode的類型都是QDomDocument.那么你可以使用toDocument()函數(shù)將QDomNode類型轉(zhuǎn)換成QDomDocument.

  1. QString text=node.toElement().text(); 

上面的語句可以將一個(gè)節(jié)點(diǎn)里的文本取出,也就是標(biāo)記內(nèi)的文本部分。使用該函數(shù)獲得的編碼就已經(jīng)是unicode格式了,不需要再做轉(zhuǎn)換。

小結(jié):對(duì)于Qt使用QDomDocument操作XML文件的內(nèi)容講解完了,希望本篇文章對(duì)你有所幫助吧。

【編輯推薦】

初識(shí)Qt Object 類

新手須知 QT類大全

剖析Qt Quick之QML程序

詳談XML的應(yīng)用分類及前景

從新手到老手之Qt學(xué)習(xí)歷程

基于Qt Web瀏覽器設(shè)計(jì)與實(shí)現(xiàn)

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-12-28 10:57:37

2009-04-23 13:19:21

創(chuàng)建XMLXML文件Javascript

2022-03-22 09:41:31

Java編程語言持久化

2009-09-09 18:20:29

C# XML編程

2011-07-22 08:43:08

XML

2009-08-18 17:05:08

C#操作xml文件

2013-06-08 13:29:27

Android開發(fā)DOM讀取XMLXML解析

2011-06-20 14:18:27

Qt 資源 文件

2009-12-02 14:14:06

PHP DOM-XML

2011-06-23 11:16:39

Qt Excel

2011-07-05 17:38:52

QT Sqlite

2011-07-20 14:46:59

Cocoa XML 文件

2009-06-10 21:51:42

JavaScript XMLFirefox

2021-09-30 07:26:15

YamlJsonXml

2011-06-09 18:05:00

QT MySql

2009-09-16 16:59:05

LINQ to XML

2009-08-18 17:11:03

C#操作XML文件

2009-08-18 16:42:49

C# 操作XML

2011-07-05 14:46:34

2009-01-04 16:58:48

LINQ to XMLLINQXML
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)