Qt5之使用流來讀取xml

http://www.qter.org/portal.php?mod=view&aid=62php

一、新建QT控制檯應用,在.pro中添加linux

QT += core xml

二、xml文件:函數

<?xml version="1.0" encoding="UTF-8"?>
<書庫>
    <圖書 編號="1">
        <書名>Qt</書名>
        <做者>shiming</做者>
    </圖書>
    <圖書 編號="2">
        <書名>linux</書名>
        <做者>yafei</做者>
    </圖書>
</書庫>

 

三、代碼spa

#include <QCoreApplication>
#include <QtXml>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile file("my.xml");//創建指向my.xml文件的QFile對象.
    if(!file.open(QFile::ReadOnly | QFile::Text)) //以文本方式,只讀打開文件
    {
        qDebug() << "打開失敗";
        return -1;
    }

    QXmlStreamReader reader;
    reader.setDevice(&file);  //設置文件,這時會將流設置爲初始狀態

    while(!reader.atEnd()){  //若是沒有讀到文檔結尾,並且沒有出現錯誤
        QXmlStreamReader::TokenType type = reader.readNext();  //讀取下一個記號,它返回記號的類型
//流讀取器就是在一個循環中經過使用readNext()來不斷讀取記號,這裏能夠對不一樣的記號和不一樣的內容進行不一樣的處理,‘
//便可以在本函數中進行,也能夠在其餘函數或者其餘類中進行。
        //根據記號的類型來進行不一樣的輸出
        if(type == QXmlStreamReader::StartDocument){   //type == 2
            qDebug() << reader.documentEncoding()
                     << reader.documentVersion();
        }

        if(type == QXmlStreamReader::StartElement){  //type == 4
            qDebug() << type << "<" << reader.name() << ">";
            if(reader.attributes().hasAttribute("編號")){
                qDebug() << reader.attributes().value("編號");
            }
        }

        if(type == QXmlStreamReader::Characters && !reader.isWhitespace()){
            qDebug() << reader.text();
        }

        if(type == QXmlStreamReader::EndElement){  //type == 5
            qDebug() << "";
        }
    }

    // 若是讀取過程當中出現錯誤,那麼輸出錯誤信息
    if (reader.hasError()) {
            qDebug() << "error: " << reader.errorString();
    }

    file.close();


    return a.exec();
}

 

相關文章
相關標籤/搜索