QT開發(四十一)——XML文件解析基礎
一、XML文檔簡介
XML(Extensible Markup Language,可擴展標記語言),是一種通用的文本格式,被廣泛運用於數據交換和數據存儲,而不是顯示數據。XML的標籤沒有被預定義,用戶需要在使用時自行進行定義。XML是W3C(萬維網聯盟)的推薦標準。相對於數據庫表格的二維表示,XML使用的樹形結構更能表現出數據的包含關係,作爲一種文本文件格式,XML簡單明瞭的特性使得它在信息存儲和描述領域非常流行。
<?xml version="1.0" encoding="UTF-8"?>
<library>
<book id="01">
<title>Qt</title>
<author>shiming</author>
</book>
<book id="02">
<title>Linux</title>
<author>yafei</author>
</book>
</library>
每個XML文檔都由XML說明(或者稱爲XML序言)開始,它是對XML文檔處理的環境和要求的說明,比如這裏的<?xmlversion="1.0" encoding="UTF-8"?>,其中xml version=“1.0”,表明使用的XML版本號,這裏字母是區分大小寫的;encoding=“UTF-8”是使用的編碼,指出文檔是使用何種字符集建立的,默認值爲Unicode編碼。XML文檔內容由多個元素組成,一個元素由起始標籤<標籤名>和終止標籤</標籤名>以及兩個標籤之間的內容組成,而文檔中第一個元素被稱爲根元素,比如這裏的<library></library>,XML文檔必須有且只有一個根元素。元素的名稱是區分大小寫的,元素還可以嵌套,比如這裏的library、book、title和author等都是元素。元素可以包含屬性,用來描述元素的相關信息,屬性名和屬性值在元素的起始標籤中給出,格式爲<元素名 屬性名=“屬性值”>,如<book id=“01”>,屬性值必須在單引號或者雙引號中。在元素中可以包含子元素,也可以只包含文本內容,比如這裏的<title>Qt</title>中的Qt就是文本內容。
二、XML文件結構
1、XML文件頭
XML文件頭由XML聲明與DTD文件類型聲明組成。其中DTD文件類型聲明是可以缺少的,而XML聲明是必須要有的,以使文件符合XML的標準規格。
XML聲明如下:
<?xml version="1.0" encoding="gb2312"?>
XML聲明必須在XML文檔的第一行
“<?”代表一條指令的開始,“?>”代表一條指令的結束;
“xml”代表此文件是XML文件;
“ version="1.0" ”代表此文件用的是XML1.0標準;
“ encoding="gb2312" ” 代表此文件所用的字符集,默認值爲Unicode,如果文件中要用到中文,就必須將此值設定爲gb2312。
2、XML文件體
文件體中包含的是XML文件的內容,XML元素是XML文件內容的基本單元。
一個元素包含一個起始標記、一個結束標記以及標記之間的數據內容。
XML元素的格式如下:
<標記名稱 屬性名1="屬性值1" 屬性名1="屬性值1" ……>內容</標記名稱>
所有的數據內容都必須在某個標記的開始和結束標記內,而每個標記又必須包含在另一個標記的開始與結束標記內,形成嵌套式的分佈,只有最外層的標記不必被其他的標記所包含。最外層的是根元素(Root),又稱文件(Document)元素,所有的元素都包含在根元素內。
三、XML基本語法
1、註釋
XML的註釋與HTML的註釋相同,以“<!--”開始,以“-->”結束。
2、區分大小寫
在HTML中是不區分大小寫的,而XML區分大小寫,包括標記,屬性,指令等。
3、標記
XML標記與HTML標記相同,“<”表示一個標記的開始,“>” 表示一個標記的結束。XML中只要有起始標記,就必須有結束標記,而且在使用嵌套結構時,標記之間不能交叉。
在XML中不含任何內容的標記叫做空標記,格式爲:<標記名稱/>
4、屬性
XML屬性的使用與HTML屬性基本相同,但需要注意的是屬性值要加雙引號。
5、實體引用
實體引用是指分析文檔時會被字符數據取代的元素,實體引用用於XML文檔中的特殊字符,否則這些字符會被解釋爲元素的組成部分。例如,如果要顯示“<”,需要使用實體引用“<”否則會被解釋爲一個標記的起始。
6、CDATA
在XML中由一個特殊的標記CDATA,在CDATA中所有文本都不會被XML處理器解釋,直接顯示在瀏覽器中,使用方法如下:
<![CDATA[這裏的內容可以直接顯示]]>
7、處理指令
處理指令使用來給處理XML文件的應用程序提供信息的,處理指令的格式如下:
<?處理指令名稱 處理指令信息?>
XML聲明就是一條處理指令:
<?xml version="1.0" encoding="gb2312"?>
其中,“xml”是處理指令名稱,version="1.0" encoding="gb2312"是處理指令信息。
四、QtXml模塊簡介
QT中提供了QtXml模塊來進行XML文檔的處理。QtXml模塊提供三種對XML文檔的解析方法:
A、DOM方法,可以進行讀寫;
B、SAX方法,可以進行讀取;
C、基於流的方法,分別使用QXmlStreamReader和QXmlStreamWriter進行讀取和寫入。
使用XML模塊,在.pro文件中添加QT += xml,並加如相應的頭文件#include <QDomDocument>或者#include <QXmlStreamReader>。