1. 程式人生 > >Qt XML讀取寫入操作

Qt XML讀取寫入操作

XML(eXtensible Markup Language,可擴充套件標記語言)是普通用於資料交換和資料儲存的一種多用途文字檔案格式;

SVG(可標量向量圖形)XML格式,QtSvg模組提供了可用於載入並呈現SVG影象的類;

MathML(數學標記語言)XML格式的繪製文件,可以使用Qt Solution中的QtMmlWidget操作;

對於一般的XML資料處理,Qt提供了QtXml模組,QtXml提供了三種不同的應用程式介面來讀取XML文件:

1、QXmlStreamReader

     用於讀取格式良好的XML文件的快速解析器,該類最快且最易於使用,並提供了與其他Qt相容的應用程式程式設計介面,很適用於編寫單通道解析器;

     下圖是QXmlStreamReader的記號:

      

   如下XML文件:

         <body>

                 <quoto>My test XML</quoto>

        </body>

QXmlStreamReader解析這個文件,readNext()每次讀取一個元素都會生成一個新記號,用getter函式可以讀取更多資訊:

       遍歷整個文件會有如下輸出:

     StartDocument

    StartElement(name()=="body")

       StartElement(name()=="quoto")

   Characters(text()=="My test XML")

   EndElement(name()=="quoto")

   EndElement(name()=="body")

QXmlStreamReader讀取如下的XML檔案

<?xml version="1.0"?>
<bookindex>
    <entry term="sidebearings">
        <page>10</page>
        <page>34-35</page>
        <page>307-308</page>
    </entry>
    <entry term="subtraction">
        <entry term="of pictures">
            <page>115</page>
            <page>244</page>
        </entry>
        <entry term="of vectors">
            <page>9</page>
        </entry>
    </entry>
</bookindex>


通常是按層遍歷方式,下面來從程式碼體驗一下:

XmlStreamReader::XmlStreamReader(QTreeWidget*tree)

{
treeWidget=tree;
}
boolXmlStreamReader::readFile(constQString&fileName)
{
QFilefile(fileName);
if(!file.open(QFile::ReadOnly|QFile::Text)){
std::cerr<<"Error:Cannotreadfile"<<qPrintable(fileName)
<<":"<<qPrintable(file.errorString())
<<std::endl;
returnfalse;
}
qDebug()<<QString("readsuccess");
reader.setDevice(&file);
reader.readNext();
while(!reader.atEnd()){
if(reader.isStartElement()){
if(reader.name()=="bookindex"){
readBookindexElement();
}else{
reader.raiseError(QObject::tr("Notabookindexfile"));
}
}else{
reader.readNext();
}
}
file.close();
if(reader.hasError()){
std::cerr<<"Error:Failedtoparsefile"
<<qPrintable(fileName)<<":"
<<qPrintable(reader.errorString())<<std::endl;
returnfalse;
}elseif(file.error()!=QFile::NoError){
std::cerr<<"Error:Cannotreadfile"<<qPrintable(fileName)
<<":"<<qPrintable(file.errorString())
<<std::endl;
returnfalse;
}
returntrue;
}
voidXmlStreamReader::readBookindexElement()
{
reader.readNext();
while(!reader.atEnd()){
if(reader.isEndElement()){
reader.readNext();
break;
}
if(reader.isStartElement()){
if(reader.name()=="entry"){
readEntryElement(treeWidget->invisibleRootItem());
}else{
skipUnknownElement();
}
}else{
reader.readNext();
}
}
}
voidXmlStreamReader::readEntryElement(QTreeWidgetItem*parent)
{
QTreeWidgetItem*item=newQTreeWidgetItem(parent);
item->setText(0,reader.attributes().value("term").toString());
reader.readNext();
while(!reader.atEnd()){
if(reader.isEndElement()){
reader.readNext();
break;
}
if(reader.isStartElement()){
if(reader.name()=="entry"){
readEntryElement(item);
}elseif(reader.name()=="page"){
readPageElement(item);
}else{
skipUnknownElement();
}
}else{
reader.readNext();
}
}
}
voidXmlStreamReader::readPageElement(QTreeWidgetItem*parent)
{
QStringpage=reader.readElementText();
if(reader.isEndElement())
reader.readNext();
QStringallPages=parent->text(1);
if(!allPages.isEmpty())
allPages
            
           

相關推薦

Qt XML讀取寫入操作

XML(eXtensible Markup Language,可擴充套件標記語言)是普通用於資料交換和資料儲存的一種多用途文字檔案格式; SVG(可標量向量圖形)XML格式,QtSvg模組提供了可用於載入並呈現SVG影象的類; MathML(數學標記語言)

0018.scala檔案的讀取寫入操作程式碼

object Source extends scala.AnyRef {   val DefaultBufSize : scala.Int = { /* compiled code */ }   def stdin : scala.io.BufferedSource = { /* compiled cod

QT 實現 讀取 增加 刪除 實時操作xml

include "operatexml.h" include OperateXml::OperateXml(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); readXML(); load(); connect(ui.pushBut

C# 操作地址 從內存中讀取寫入數據(初級)

mode .com 陽光 pen bsp api bject str ddr 本示例以植物大戰僵屍為例, 實現功能為 每1秒讓陽光刷新為 9999.本示例使用的遊戲版本為 [植物大戰僵屍2010年度版], 使用的輔助查看內存地址的工具是 CE. 由於每次啟動遊戲, 遊戲

Java POI 操作Excel(讀取/寫入)

del sep ces 價值 name fill ber 路徑 stc pom.xml依賴: <dependency> <groupId>org.apache.poi</groupId>

關於Python中讀取寫入檔案並進行檔案與使用者互動的操作

一、提前知識點 在python中是同樣和其他語言一樣可以進行檔案的讀取寫入操作,值得注意的是,Python中開啟檔案讀取的方式有幾種,分別是以下幾種: 1 f = open('username.txt') 2 first_line = f.readline() 3 print('fi

Qt XML檔案的建立、讀取介紹以及“重寫XML不能覆蓋原內容問題”解決

簡介XML XML(Extensible Markup Language,可擴充套件標記語言),是一種類似於HTML的標記語言,設計目的是用來傳輸資料,而不是顯示資料。XML的標籤沒有被預定義,使用者需要在使用時自行進行定義。XML是W3C(全球資訊網聯盟)的推薦標準。相對於資料庫表格的二維

C++:txt檔案的讀取寫入操作研究

1. 讀取txt檔案的內容                                      

QT讀取XML檔案三種方式 的例項

第一部分:QXmlStreamReader XML(eXtensible Markup Language)是一種通用的文字格式,被廣泛運用於資料交換和資料儲存(雖然近年來 JSON 盛行,大有取代 XML 的趨勢,但是對於一些已有系統和架構,比如 WebService,由於歷史原因,仍舊會繼

Verilog十大基本功2(testbench的設計 檔案讀取寫入操作 原始碼)

需求說明:Verilog設計基礎 內容       :testbench的設計 讀取檔案 寫入檔案 來自       :時間的詩 十大基本功之 testbench 1. 激勵的產生 對於 testbench 而言,埠應當和被測試的 module 一一對應。 埠分

基於boost的ini 檔案讀取/列舉/寫入操作

[setting] key1=1 key2=hello 上面是ini檔案的內容, 執行如下程式碼: #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ini_par

java中的檔案操作讀取寫入byte[]位元組流、string字串、list列表

全棧工程師開發手冊 (作者:欒鵬) java中檔案操作:讀取檔案成位元組流,將位元組流寫入檔案,按行讀取檔案成字串列表,將字串列表儲存成檔案,讀取檔案成字串,將字串寫入檔案。 主

nodejs-操作檔案系統讀取寫入檔案

我們通過fs這個模組來對檔案系統進行操作,對於檔案系統操作一般都有同步、非同步方法,兩者區別,同步等有返回結果時候,在繼續執行後面的程式碼,非同步是不等返回結果,直接執行後面的程式碼,待有返回結果時候,通過回撥函式來做出處理。一般同步方法函式名在非同步方法名字後面加Sync

java檔案建立、刪除、讀取寫入操作大全

複製檔案 1.以檔案流的方式複製檔案 public void copyFile(String src,String dest) throws IOException...{          FileInputStream in=new FileInputStream(s

C#解析讀取XML檔案,並且對XML檔案進行操作

如果不懂XML文件結構,請點選移步這裡 在綜合搜尋了網上的文章之後發現,有很多文章的講解博主看的一知半解,並且有些方法已經找不到了,所以就有了自己整理一下學習成果,同時通過部落格共享成果 目前還在學習中,先佔坑,後續補上 經過昨天的實驗和測試,補上C#XML的資訊讀取操

ini檔案操作讀取/寫入

示例: // iniText.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windows.h> #include &l

QT DOM方式寫入xml檔案

依賴的標頭檔案: #include <QFile> #include <QString> #include <QtXml> #include <QDomDocument> #include <QDateTime>

Qt讀取/寫入Excel資料--QAxObject

效果圖: QT += core gui axcontainer CONFIG += qaxcontainer greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = fast

XML使用DOM操作

ber 類型 iphone document trac ktr 編碼 ner ipa DOM 文檔對象模型   基於XML文檔樹結構解析   適用於多次訪問的xml文檔   特點:比較消耗資源   1).Document對象     NodeList getElement

文本與集合的讀取寫入方式總結

void space -1 方式 static div throws col arraylist //1.從文本中讀取並添加到集合,按行讀取 1 public static void main(String[] args) throws IOException { 2