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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

【Qt】 XML流读写XML

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

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 概述
    • 02. 開發環境
    • 03. 讀取XML文檔
    • 04. 寫入XML文檔
    • 05. 預留
    • 06. 附錄

01. 概述

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

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

與QXmlStreamReader對應的是QXmlStreamWriter,它通過一個簡單的流API提供了一個XML寫入器。QXmlStreamWriter的使用也是十分簡單的,只需要調用相應的記號的寫入函數來寫入相關數據即可。

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

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

溫馨提示

在Qt6中,SAX解析方式已經不推薦使用,強烈建議使用QXmlStreamReaderQXmlStreamWriter代替。

02. 開發環境

Windows系統:Windows10

Qt版本:Qt5.15或者Qt6

03. 讀取XML文檔

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

QT += xml

3.2 在main.cpp文件,將內容更改如下:

#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;//設置文件 將流設置為初始狀態reader.setDevice(&file);//如果沒有讀到文檔結尾 而且沒有出現錯誤while(!reader.atEnd()){//讀取下一個記號 它返回記號的類型QXmlStreamReader::TokenType type = reader.readNext();//下面根據記號的類型來進行不同的輸出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();}}//如果讀取中出現了錯誤 就輸出錯誤信息if (reader.hasError()){qDebug() << "error: " << reader.errorString();}file.close();return a.exec(); }

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

"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對應的是QXmlStreamWriter,它通過一個簡單的流API提供了一個XML 寫人器。QXmlStreamWriter的使用也十分簡單,只需要調用相應記號的寫入函數來寫入相關數據即可。

#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();//關閉文件file.close();qDebug() << "Write Finished";return a.exec(); }

執行結果 test2.xml文件內容如下:

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

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

05. 預留

06. 附錄

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

6.2 源碼下載
網址:【Qt】 XML流讀寫XML.rar

總結

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

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