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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【Qt】 XML流读写XML

發(fā)布時(shí)間:2024/4/24 asp.net 95 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Qt】 XML流读写XML 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 概述
    • 02. 開發(fā)環(huán)境
    • 03. 讀取XML文檔
    • 04. 寫入XML文檔
    • 05. 預(yù)留
    • 06. 附錄

01. 概述

從Qt 4.3開始引入了兩個(gè)新的類來讀取和寫入XML文檔: QXmlStreamReaderQXmlStreamWriter

QXmlStreamReader類提供了一個(gè)快速的解析器,通過一個(gè)簡單的流API來讀取格式良好的XML文檔,它是作為Qt的SAX解析器的替代品的身份出現(xiàn)的,因?yàn)樗萐AX解析器更快更方便。流讀取器的基本原理就是將XML文檔報(bào)告為一個(gè)記號(tokens)流,應(yīng)用程序代碼自身來驅(qū)動循環(huán),在需要的時(shí)候可以從讀取器中一個(gè)接一個(gè)的拉出記號。這個(gè)是通過調(diào)用readNext()函數(shù)實(shí)現(xiàn)的,它可以讀取下一個(gè)記號,然后返回一個(gè)記號類型,它由QXmlStreamReader::TokenType定義,其所有取值如表所列。然后可以使用isStartElement()和text()等函數(shù)來判斷這個(gè)記號是否包含需要的信息。

與QXmlStreamReader對應(yīng)的是QXmlStreamWriter,它通過一個(gè)簡單的流API提供了一個(gè)XML寫入器。QXmlStreamWriter的使用也是十分簡單的,只需要調(diào)用相應(yīng)的記號的寫入函數(shù)來寫入相關(guān)數(shù)據(jù)即可。

XML流包含兩個(gè)部分QXmlStreamReader和和QXmlStreamWriter。 QXmlStream Reader 類提供了一個(gè)快速的解析器.它通過一個(gè)簡單的流API 來讀取格式良好的XML 文擋,它是作為Qt 的SAX 解析器的替代品身份出現(xiàn)的,因?yàn)樗萐AX 解析器更快更方便。

在SAX 中,應(yīng)用程序必須提供處理器(回調(diào)函數(shù))來從解析器獲得所謂的XML 事件;而QXmlStreamReader是應(yīng)用程序代碼向身來驅(qū)動循環(huán),在需要的時(shí)候可以從讀取器中一個(gè)接一個(gè)地拉出記號。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-tauu8Hp2-1616769486826)(assets/image-20210326220914076.png)]

溫馨提示

在Qt6中,SAX解析方式已經(jīng)不推薦使用,強(qiáng)烈建議使用QXmlStreamReaderQXmlStreamWriter代替。

02. 開發(fā)環(huán)境

Windows系統(tǒng):Windows10

Qt版本:Qt5.15或者Qt6

03. 讀取XML文檔

3.1 新建Qt控制臺應(yīng)用QtConsole Application,項(xiàng)目名稱為18XML,完成后將18XML.pro文件的第一行代碼更改為:

QT += xml

3.2 在main.cpp文件,將內(nèi)容更改如下:

#include <QCoreApplication>#include <QFile> #include <QXmlStreamReader> #include <QXmlStreamWriter> #include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QFile file("../18XML/test.xml");if (!file.open(QFile::ReadOnly | QFile::Text)){qDebug() << "Error: 打開文件失敗";return 1;}QXmlStreamReader reader;//設(shè)置文件 將流設(shè)置為初始狀態(tài)reader.setDevice(&file);//如果沒有讀到文檔結(jié)尾 而且沒有出現(xiàn)錯(cuò)誤while(!reader.atEnd()){//讀取下一個(gè)記號 它返回記號的類型QXmlStreamReader::TokenType type = reader.readNext();//下面根據(jù)記號的類型來進(jìn)行不同的輸出if (type == QXmlStreamReader::StartDocument){qDebug() << reader.documentEncoding() << reader.documentVersion();}if (type == QXmlStreamReader::StartElement){qDebug() << "<" << reader.name() << ">";if (reader.attributes().hasAttribute("id")){qDebug() << reader.attributes().value("id");}}if (type == QXmlStreamReader::EndElement){qDebug() << "</" << reader.name() << ">";}if (type == QXmlStreamReader::Characters && !reader.isWhitespace()){qDebug() << reader.text();}}//如果讀取中出現(xiàn)了錯(cuò)誤 就輸出錯(cuò)誤信息if (reader.hasError()){qDebug() << "error: " << reader.errorString();}file.close();return a.exec(); }

可以看到流讀取器就是在一個(gè)循環(huán)中通過使用readNext()來不斷讀取記號的,這里可以對不同的記號和不同的內(nèi)容進(jìn)行不同的處理,既可以在本函數(shù)中進(jìn)行,也可以在其他函數(shù)或者其他類中進(jìn)行。運(yùn)行程序,查看效果。

"UTF-8" "1.0" < "library" > < "book" > "01" < "title" > "Qt" </ "title" > < "author" > "LiMing" </ "author" > </ "book" > < "book" > "02" < "title" > "Linux" </ "title" > < "author" > "ZhengGang" </ "author" > </ "book" > </ "library" >

04. 寫入XML文檔

與QXmlStreamReader對應(yīng)的是QXmlStreamWriter,它通過一個(gè)簡單的流API提供了一個(gè)XML 寫人器。QXmlStreamWriter的使用也十分簡單,只需要調(diào)用相應(yīng)記號的寫入函數(shù)來寫入相關(guān)數(shù)據(jù)即可。

#include <QCoreApplication>#include <QFile> #include <QXmlStreamReader> #include <QXmlStreamWriter> #include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QFile file("../18XML/test2.xml");if (!file.open(QFile::WriteOnly | QFile::Text)){qDebug() << "Error: 打開文件失敗";return 1;}QXmlStreamWriter writer(&file);writer.setAutoFormatting(true);writer.writeStartDocument();writer.writeStartElement("bookmark");writer.writeAttribute("href", "http://www.qt.io");writer.writeTextElement("title", "Qt Home");writer.writeEndElement();writer.writeEndDocument();//關(guān)閉文件file.close();qDebug() << "Write Finished";return a.exec(); }

執(zhí)行結(jié)果 test2.xml文件內(nèi)容如下:

<?xml version="1.0" encoding="UTF-8"?> <bookmark href="http://www.qt.io"> <title>Qt Home</title> </bookmark>

這里使用了setAutoFormatting(true)函數(shù)來自動設(shè)置格式,這樣會自動換行和添加縮進(jìn)。然后使用了writeStartDocument(),該函數(shù)會自動添加首行的XML說明(即),添加元素可以使用writeStartElement(),不過,這里要注意,一定要在元素的屬性、文本等添加完成后,使用writeTextElement()來關(guān)閉前一個(gè)打開的元素。在最后使用writeEndDocument()來完成文檔的寫入。現(xiàn)在大家可以運(yùn)行程序了,這時(shí)會在項(xiàng)目目錄中生成一個(gè)XML文檔。

05. 預(yù)留

06. 附錄

6.1 Qt教程匯總
網(wǎng)址:https://dengjin.blog.csdn.net/article/details/115174639

6.2 源碼下載
網(wǎng)址:【Qt】 XML流讀寫XML.rar

總結(jié)

以上是生活随笔為你收集整理的【Qt】 XML流读写XML的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。