Qt中使用DOM對XML檔案的標籤屬性進行修改

2021-06-22 19:33:02 字數 1817 閱讀 5519

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,而你知道它實際的型別並需要使用的時候就可能會需要進行...