qt中對於
xml檔案的讀寫兩種方式:dom和
sax,兩種方法的具體介紹如下:
1. 用於讀取和操作 xml
檔案的標準是文件物件模型
dom。
優點:dom為
xml文件的已解析版本定義了一組介面。解析器讀入整個文件,然後構建乙個駐留記憶體的樹結構,然後您的**就可以使用
dom
介面來操作這個樹結構。您可以遍歷樹以了解原始文件包含了什麼,您可以刪除樹的幾個部分,還可以重新排列樹和新增新的分支,等等。
不足:(1)dom 方法涉及讀取整個檔案並將該檔案儲存在乙個樹結構中,而這樣可能是低效的、緩慢的,並且很消耗資源
:(2)dom 構建整個文件駐留記憶體的樹。如果文件很大,就會要求有極大的記憶體。
(3)dom 建立表示原始文件中每個東西的物件,包括元素、文字、屬性和空格。如果您只需關注原始文件的一小部分,那麼建立那些永遠不被使用的物件是極其浪費的。
(4)dom 解析器必須在您的**取得控制權之前讀取整個文件。對於非常大的文件,這會引起顯著的延遲。
這些僅僅是由文件物件模型的設計引起的問題;拋棄這些問題,dom api
是解析
xml
文件非常有用的方法。
2. 一種替代技術就是sax。
sax 是讀取和操作
xml
資料的更快速、更輕量的方法。
sax
允許您在讀取文件時處理它,從而不必等待整個文件被儲存之後才採取操作。它不涉及
dom所必需的開銷和概念跳躍。
sax api是乙個基於事件的
api,適用於處理資料流,即隨著資料的流動而依次處理資料。
sax api 在其解析您的文件時發生一定事件的時候會通知您。在您對其響應時,您不作儲存的資料將會被拋棄。
小結:我們可以看到,如果所要讀取的xml
檔案不是很大,採用
dom讀取方法還是很便捷的,由於我用的也是
dom樹讀取的方法,所以,本文所介紹的也主要是基於
dom的方法讀取。
3. 使用
dom對
xml的標籤屬性值進行修改
原xml
檔案:
修改xml
**的**:
bool myxml::writeconfigbyname(qstring name,qstring &path)
qdomelement docelem = doc.documentelement();
qdomnode n = docelem.firstchild();
qstring oldpath;
while(!n.isnull())
{qdomelement e = n.toelement();
if(!e.isnull())
{if(e.tagname() == name)
{cout<
main函式
myxml myxml;
qstring name = "download";
qstring path= "d:/hhh";
myxml.writeconfigbyname(name, path);
執行結果(xml):
如果標籤之間新增紅色內容後,再次執行結果如下(xml):
hello people!
test is ok!
down is there?
QT讀寫XML檔案之DOM方式解析XML
一 dom簡介 1 dom簡介 dom是document object model的簡寫,即xml文件物件模型,是由w3c提出的一種處理xml文件的標準介面。dom 一次性讀入整個xml文件,在記憶體中構造為一棵樹 dom樹 將xml檔案表示成一棵樹,便於隨機訪問其中的節點,但消耗記憶體相對多一些。...
用DOM實現對XML檔案的解析
dom的 xml.dom.minidom 子模組 xml.dom.pulldom 子模組分別提供兩種形式的解析器。1.1 node 介面物件相關函式 node.childnodes,返回當前節點中包含的節點列表,這是乙個唯讀屬性。1.2 document 介面物件相關函式 document.docu...
使用Dom生成xml檔案和解析xml檔案
xml這種檔案格式在很多時候都是很適合我們用來訪問資料的,所以利用程式來生成xml檔案和解析xml檔案就顯得比較重要了。在dom中是把每乙個元素都看做是乙個節點node的,所有頁面上的屬性 元素等都是繼承自node的,所以當獲取到的是乙個node,而你知道它實際的型別並需要使用的時候就可能會需要進行...