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
相關文章
- IOS 學習之XML解析(一)iOSXML
- java基礎學習之--XMLJavaXML
- Qt學習2QT
- XML輕鬆學習手冊(5)XML語法之四(轉)XML
- Android學習之Build.xml檔案AndroidUIXML
- Qt學習之路2QT
- QT外掛學習QT
- QT學習小demo之LightMD(MarkDown編輯器)QT
- Qt 事件機制 學習QT事件
- Python學習——xml模組PythonXML
- Qt學習之---Qt+VS2010整合開發環境(IDE)搭建QT開發環境IDE
- QT學習筆記4(動畫)QT筆記動畫
- QT5學習 QFileSystemModelQT
- QT學習記錄總結QT
- QT 學習錯誤總結QT
- Qt學習- (掃雷專案初學)QT
- qt 寫入xml檔案例項QTXML
- hibernate學習:HelloWorld_xmlXML
- banq:關於XML的學習XML
- 學習使用XML引擎XQEngine(轉)XML
- 【Qt】Qt再學習(二):Chart Themes Example(常用圖表)QT
- QT5學習 QStringListModelQT
- Qt學習之路(50): QString薦QT
- QT: 操作主從檢視及XMLQTXML
- XML學習筆記–背誦版XML筆記
- XML與JSON學習歸納XMLJSON
- 【Go學習筆記16】解析xmlGo筆記XML
- XML輕鬆學習手冊(3)XML概念之一(轉)XML
- XML輕鬆學習手冊(6)XML例項解析(轉)XML
- Qt學習--Qt Plugin建立及呼叫2(外掛管理器)QTPlugin
- QT學習 實時顯示時間QT
- Qt學習筆記(五)QString 字串QT筆記字串
- XML初學進階學習筆記(1)(轉)XML筆記
- XML初學進階學習筆記(5)(轉)XML筆記
- XML初學進階學習筆記(4)(轉)XML筆記
- XML初學進階學習筆記(3)(轉)XML筆記
- XML初學進階學習筆記(2)(轉)XML筆記
- XML輕鬆學習手冊(5)XML語法之二(轉)XML