日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【Qt】DOM读取XML文档

發布時間:2024/4/24 asp.net 97 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Qt】DOM读取XML文档 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 概述
    • 02. 開發環境
    • 03. XML文檔示例
    • 04. DOM讀取XML文檔內容
    • 05. 預留
    • 06. 附錄

01. 概述

DOM(Document Object Model,文檔對象模型),是W3C的推薦標準。它提供了一個接口來訪問和改變一個XML文件的內容和結構,可以將XML文檔表示為一個存儲在內存中具有層次的樹視圖。文檔本身由QDomDocument對象來表示,而文檔樹中所有的DOM節點都是QDomNode類的子類。

在Qt中使用QDomProcessingInstruction類來表示XML說明。元素對應QDomElement類。屬性對應QDomAttr類。文本內容由QDomText類表示。所有的DOM節點,比如這里的說明、元素、屬性和文本等,都使用QDomNode來表示。

元素對應QDomElement 類。元素可以包含屬性,用來描述元素的相關信息,屬性名和屬性值在元素的起始標簽中給出。

屬性值必須在單引號或者雙引號中。屬性對應QDomAttr 類。

元素中可以包含子元素,也可以只包含文本內容,比如這里<first-name> Mary </first-name>中的Mary就是文本內容,文本內容由QDomText 類表示。

XML(ExtensibleMarkup Language,可擴展標記語言),是一種類似于HTML的標記語言,但它的設計目的是用來傳輸數據,而不是顯示數據。XML的標簽沒有被預定義,用戶需要在使用時自行進行定義。XML是W3C(萬維網聯盟)的推薦標準。相對于數據庫表格的二維表示,XML使用的樹形結構更能表現出數據的包含關系,作為一種文本文件格式,XML簡單明了的特性使得它在信息存儲和描述領域非常流行。

? 在Qt中提供了Qt XML模塊來進行XML文檔的處理,這里主要提供了兩種解析方法: DOM方法,可以進行讀寫;SAX方法,可以進行讀取。從Qt 5開始,Qt XML模塊不再進行維護,而是推薦使用Qt Core模塊中基于流的方法,分別使用QXmlStreamReader和QXmlStreamWriter進行讀取和寫入。本文檔先來講解一下DOM的方法。要在項目中使用Qt XML模塊,需要在項目文件(.pro文件)中添加QT += xml一行代碼。

02. 開發環境

Windows系統:Windows10

Qt版本:Qt5.15、Qt6

03. XML文檔示例

規范的XML文檔如下所示:

<?xml version="1.0"encoding="UTF-8"?> <library><book id="01"><title>Qt</title><author>LiMing</author></book><book id="02"><title>Linux</title><author>ZhengGang</author></book> </library>

每個XML文檔都由XML說明(或者稱為XML序言)開始,它是對XML文檔處理的環境和要求的說明,比如這里的,其中xml version=“1.0”,表明使用的XML版本號,這里字母是區分大小寫的;encoding=“UTF-8”是使用的編碼,指出文檔是使用何種字符集建立的,默認值為Unicode編碼。XML文檔內容由多個元素組成,一個元素由起始標簽<標簽名>和終止標簽以及兩個標簽之間的內容組成,而文檔中第一個元素被稱為根元素,比如這里的,XML文檔必須有且只有一個根元素。元素的名稱是區分大小寫的,元素還可以嵌套,比如這里的library、book、title和author等都是元素。元素可以包含屬性,用來描述元素的相關信息,屬性名和屬性值在元素的起始標簽中給出,格式為<元素名 屬性名=“屬性值”>,如,屬性值必須在單引號或者雙引號中。在元素中可以包含子元素,也可以只包含文本內容,比如這里的中的Qt就是文本內容。

04. DOM讀取XML文檔內容

Dom(Document Object Model,即文檔對象模型)把XML文檔轉換成應用程序可以遍歷的樹形結構,這樣便可以隨機訪問其中的節點。它的缺點是需要將整個XML文檔讀入內存,消耗內存較多。

在Qt中使用QDomProcessingInstruction類來表示XML說明,元素對應QDomElement類,屬性對應QDomAttr類,文本內容由QDomText類表示。所有的DOM節點,比如這里的說明、元素、屬性和文本等,都使用QDomNode來表示,然后使用對應的isProcessingInstruction()、isElement()、isAttr()和isText()等函數來判斷是否是該類型的元素,如果是,那么就可以使用toProcessingInstruction()、toElement()、toAttr()和toText()等函數轉換為具體的節點類型。

4.1 新建Qt控制臺應用QtConsole Application,項目名稱為16XML。

4.2 在16XML.pro配置文件中添加下一行

QT += xml

4.3 main.cpp內容如下

int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);//新建QDomDocument類對象 代表一個XML文檔QDomDocument doc;//創建test.xml文件QFile file("../test.xml");//以只讀方式打開該文件bool ret = file.open(QIODevice::ReadOnly);if (!ret){qDebug() << "打開文件失敗";file.close();return 1;}//將文件內容讀到doc中ret = doc.setContent(&file);if (!ret){qDebug() << "設置內容失敗";file.close();return 1;}file.close();//獲取doc第一個節點 即XML說明QDomNode firstNode = doc.firstChild();//輸出XML說明qDebug() << firstNode.nodeName() << firstNode.nodeValue();return 0;//return a.exec(); }

執行結果

“xml” “version=‘1.0’ encoding=‘UTF-8’”

不愿意看到字符串兩邊的引號,可以將源碼中得qDebug()語句更改如下:

//輸出XML說明//qDebug() << firstNode.nodeName() << firstNode.nodeValue();qDebug() << qPrintable(firstNode.nodeName())<< qPrintable(firstNode.nodeValue());

執行結果

xml version='1.0' encoding='UTF-8'

4.4 繼續修改main.cpp文件內容如下:

#include <QCoreApplication> #include <QDebug> #include <QDomDocument> #include <QDomNode> #include <QtXml> #include <QFile>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);//新建QDomDocument類對象 代表一個XML文檔QDomDocument doc;//創建test.xml文件QFile file("../test.xml");//以只讀方式打開該文件bool ret = file.open(QIODevice::ReadOnly);if (!ret){qDebug() << "打開文件失敗";file.close();return 1;}//將文件內容讀到doc中ret = doc.setContent(&file);if (!ret){qDebug() << "設置內容失敗";file.close();return 1;}file.close();//獲取doc第一個節點 即XML說明QDomNode firstNode = doc.firstChild();//輸出XML說明//qDebug() << firstNode.nodeName() << firstNode.nodeValue();qDebug() << qPrintable(firstNode.nodeName())<< qPrintable(firstNode.nodeValue());//返回根元素QDomElement docElem = doc.documentElement();//返回根節點的第一個子節點QDomNode root = docElem.firstChild();while(!root.isNull()){//如果節點是元素if (root.isElement()){//將其轉換為元素QDomElement e = root.toElement();//返回元素的標記 和id屬性的值qDebug() << qPrintable(e.tagName())<< qPrintable(e.attribute("id"));}//下一個兄弟節點root = root.nextSibling();}return 0;//return a.exec(); }

執行結果如下:

xml version='1.0' encoding='UTF-8' book 01 book 02

4.5 繼續修改main.cpp文件,得到所有節點

#include <QCoreApplication> #include <QDebug> #include <QDomDocument> #include <QDomNode> #include <QtXml> #include <QFile>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);//新建QDomDocument類對象 代表一個XML文檔QDomDocument doc;//創建test.xml文件QFile file("../test.xml");//以只讀方式打開該文件bool ret = file.open(QIODevice::ReadOnly);if (!ret){qDebug() << "打開文件失敗";file.close();return 1;}//將文件內容讀到doc中ret = doc.setContent(&file);if (!ret){qDebug() << "設置內容失敗";file.close();return 1;}file.close();//獲取doc第一個節點 即XML說明QDomNode firstNode = doc.firstChild();//輸出XML說明//qDebug() << firstNode.nodeName() << firstNode.nodeValue();qDebug() << qPrintable(firstNode.nodeName())<< qPrintable(firstNode.nodeValue());//返回根元素QDomElement docElem = doc.documentElement();//返回根節點的第一個子節點QDomNode root = docElem.firstChild();while(!root.isNull()){//如果節點是元素if (root.isElement()){//將其轉換為元素QDomElement e = root.toElement();//返回元素的標記 和id屬性的值qDebug() << qPrintable(e.tagName())<< qPrintable(e.attribute("id"));//獲取元素e的所有子節點的列表QDomNodeList list = e.childNodes();//遍歷該列表for (int i = 0; i < list.size(); i++){QDomNode node = list.at(i);if (node.isElement()){qDebug() << " " << qPrintable(node.toElement().tagName())<< qPrintable(node.toElement().text());}}}//下一個兄弟節點root = root.nextSibling();}return 0;//return a.exec(); }

使用了childNodes()函數獲得了元素所有子節點的列表,然后通過遍歷這個列表實現了遍歷其所有子元素。 執行結果

xml version='1.0' encoding='UTF-8' book 01title Qtauthor LiMing book 02title Linuxauthor ZhengGang

05. 預留

06. 附錄

6.1 Qt教程匯總
網址:https://dengjin.blog.csdn.net/article/details/115174639

6.2 源碼下載
網址:【Qt】DOM讀取XML文檔.rar

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的【Qt】DOM读取XML文档的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。