Qt學習之XML
XML介紹
XML的操作有兩種方式,及DOM(Document Object Model)和SAX(Simple API for XML)。
DOM的解析原理:一次性把XML檔案載入到記憶體,然後在記憶體中建立Document樹,對記憶體要求比較嚴格。缺點:不適合讀區大容量的XML檔案,容易導致記憶體溢位。
SAX的解析原理:載入一點,讀取一點,處理一點,提供大量虛擬函式,以事件的形式處理 XML 文件。應用程式必須提供處理器(回撥函式) 來從解析器獲得所謂XML事件,但是比DOM佔用的記憶體要少的多。缺點:SAX 很難修改資料,開發人員需要編寫一些複雜的程式碼。
目前Qt提供了對應於這兩種用於讀取、操作和編寫XML的實現類,分別是QDomDocument類和QXmlStreamReader類。
如果要使用XML時,需新增下行程式碼:
#include
並在.pro檔案中新增:
QT += xml
DOM
QDomDocument類
專案中涉及到的操作無非也就增刪改查,對應於XML檔案中相應標記的讀、寫和修改。
增加:建立節點,將其寫入xml檔案中。
XML中的說明對應QDomProcessingInstruction
XML中的元素對應QDomElement類
XML中的屬性對應QDomAttr類
XML中的文字對應QDomText類
QT中所有的Dom節點(說明、元素、屬性、文字),都是用QDomNode表示
1).定義文件:QDomDocument doc;
2).建立說明:QDomProcessingInstruction instruction = doc.createProcessingInstruction(“xml”, "version=“1.0” encoding=“UTF-8"”);
3).建立根節點:QDomElement root = doc.createElement("rootName " );
4).建立元素節點:QDomElement element = doc.createElement(“nodeName”);
5).新增元素節點到根節點:root. appendChild(element);
6).建立元素文字:QDomText nodeText=doc.createTextNode(“text”);
7).新增元素文字到元素節點:element. appendChild(nodeText);
8).建立元素屬性:QDomAttr id = doc.createAttribute(nodeAttribute);
9).新增元素屬性值:id.setValue(value);
上面是建立一個便籤節點,若要繼續新增便籤節點,則需要在已有節點後增加一個新節點,並重寫入XML檔案(QIODevice::Truncate)
載入、查詢便籤時要讀取XML文件中的節點資訊。
DOM實現方式是將整個文件當作一個物件來裝入記憶體進行處理,然後開發者可以訪問這個物件中的每一個節點,每一個節點對應XML檔案裡的一個標記。
1).設定整個文件內容,將xml文件內容解析為一個DOM樹:setContent(檔案)
2).讀取根節點:QDomElement root = doc.documentElement();
3).讀取第一個子節點:QDomNode node = root.firstChild();
4).讀取下一個子節點:node = node.nextSibling();
5).匹配結點標記:node.toElement().tagName() == “note”
6).讀取節點文字:no = childNode.toText().data();
刪除便籤時,要刪除相應的XML節點。
用到的主要函式為:root.removeChild(node); 但在刪除某個節點後要重寫整個檔案。
注:對xml檔案修改後一定要對file進行操作,如下:
QFile file("my.xml");
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
return;
QTextStream out(&file);
out.setCodec("UTF-8");
//縮排4
doc.save(out, 4, QDomNode::EncodingFromTextStream);
file.close();
SAX
相關文章
- Qt學習2QT
- QT學習小demo之LightMD(MarkDown編輯器)QT
- Python學習——xml模組PythonXML
- qt 寫入xml檔案例項QTXML
- Qt 事件機制 學習QT事件
- XML與JSON學習歸納XMLJSON
- Android學習筆記之AndroidManifest.xml檔案解析(詳解)Android筆記XML
- QT: 操作主從檢視及XMLQTXML
- 【Qt】Qt再學習(二):Chart Themes Example(常用圖表)QT
- XML學習筆記–背誦版XML筆記
- 【Go學習筆記16】解析xmlGo筆記XML
- Qt學習筆記(五)QString 字串QT筆記字串
- QT學習筆記4(動畫)QT筆記動畫
- Qt學習--Qt Plugin建立及呼叫2(外掛管理器)QTPlugin
- QT學習 實時顯示時間QT
- android學習-應用結構-AndroidManifest.xmlAndroidXML
- Java學習--xml文字轉換成Java物件JavaXML物件
- 學習 XSLT:XML文件轉換的關鍵XML
- Qt之QTimeEditQT
- python之XML解析PythonXML
- Qt4.8.5 + VS2010 學習筆記QT筆記
- QT學習:給label新增圖片資源QT
- 學習 XQuery:XML資料查詢的關鍵XML
- 前端學習之Bootstrap學習前端boot
- VTK QT 之 RenderWindowNoUiFileQTUI
- VTK QT 之 RenderWindowUISingleInheritanceQTUI
- java基礎之XMLJavaXML
- Python XML解析之DOMPythonXML
- XML安全之Web ServicesXMLWeb
- C# 之 Linq to XmlC#XML
- (持續更新)Qt3D 學習資源QT3D
- 機器學習之學習速率機器學習
- Mybatis 學習筆記(一)——配置檔案SqlMapConfig.xml和對映檔案Mapper.xmlMyBatis筆記SQLXMLAPP
- QT學習筆記(三)——QT中的座標系統及視窗位置,大小配置QT筆記
- 機器學習之學習曲線機器學習
- 學習 Qt 程式設計的好書精品推薦!QT程式設計
- Qt學習第二篇(基本小元件的使用)QT元件
- Qt Creator 原始碼學習筆記01,初識QTCQT原始碼筆記