最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt讀寫(xiě)XML文件的方法詳解(含源碼+注釋)

 更新時(shí)間:2022年10月21日 10:36:05   作者:lw只吃億點(diǎn).  
XML文件可以用來(lái)存儲(chǔ)項(xiàng)目中的數(shù)據(jù),它相當(dāng)于一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于Qt讀寫(xiě)XML文件(含源碼+注釋)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、示例XML文件內(nèi)容

下方為本文所使用的xml文件的內(nèi)容

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <childNode1 attruKey="attriVal">childNode1 Val</childNode1>
    <childNode2 attruKey="attriVal">
        <cChildNode1 shuxing1="1">cChildNode1 Val</cChildNode1>
        <cChildNode2 shuxing2="2">cChildNode2 Val</cChildNode2>
    </childNode2>
</root>

二、XML文件的寫(xiě)入

下方為XML文件寫(xiě)入的源碼,其中代碼內(nèi)容按順序如下:

  • QDomDocument對(duì)象的創(chuàng)建和xml文件頭的添加
  • 創(chuàng)建根節(jié)點(diǎn)
  • 創(chuàng)建包含屬性和節(jié)點(diǎn)值的子節(jié)點(diǎn)
  • 創(chuàng)建較為復(fù)雜的子節(jié)點(diǎn)(包含屬性和第三級(jí)節(jié)點(diǎn))
  • 寫(xiě)入文件
        //創(chuàng)建QDomDocument對(duì)象
    QDomDocument xDoc;
    QDomProcessingInstruction inStruction;
    //寫(xiě)入xml文件頭(xml版本信息和編碼信息)
    inStruction = xDoc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
    xDoc.appendChild(inStruction);

    //創(chuàng)建根節(jié)點(diǎn)并將其添加到xDoc中
    QDomElement root = xDoc.createElement("root");
    xDoc.appendChild(root);

    //創(chuàng)建子節(jié)點(diǎn)1
    QDomElement childNode1 = xDoc.createElement("childNode1");
    //為子節(jié)點(diǎn)childNode1設(shè)置屬性及屬性值
    childNode1.setAttribute("attruKey", "attriVal");
    //! 為子節(jié)點(diǎn)childNode1添加節(jié)點(diǎn)值
    //! 創(chuàng)建QDomText對(duì)象并設(shè)置其值
    QDomText nodeVal = xDoc.createTextNode("childNode1 Val");
    //使用QDomElement對(duì)象的節(jié)點(diǎn),添加節(jié)點(diǎn)值需添加QDomText對(duì)象,否則有可能不顯示該值
    childNode1.appendChild(nodeVal);
    //將子節(jié)點(diǎn)1添加到根節(jié)點(diǎn)中
    root.appendChild(childNode1);

    //! 創(chuàng)建一個(gè)多級(jí)節(jié)點(diǎn)childNode2

    //創(chuàng)建多級(jí)節(jié)點(diǎn)2
    QDomElement childNode2 = xDoc.createElement("childNode2");
    //為多級(jí)節(jié)點(diǎn)childNode2設(shè)置屬性及屬性值
    childNode2.setAttribute("attruKey", "attriVal");
    //創(chuàng)建多級(jí)節(jié)點(diǎn)的子節(jié)點(diǎn)1
    QDomElement cChildNode1 = xDoc.createElement("cChildNode1");
    //設(shè)置cChildNode1的屬性和值
    cChildNode1.setAttribute("shuxing1", 1);
    //設(shè)置cChildNode1的節(jié)點(diǎn)值
    cChildNode1.appendChild(xDoc.createTextNode("cChildNode1 Val"));
    //將cChildNode1節(jié)點(diǎn)添加到多級(jí)節(jié)點(diǎn)中
    childNode2.appendChild(cChildNode1);

    //創(chuàng)建多級(jí)節(jié)點(diǎn)的子節(jié)點(diǎn)2
    QDomElement cChildNode2 = xDoc.createElement("cChildNode2");
    //設(shè)置cChildNode2的屬性和值
    cChildNode2.setAttribute("shuxing2", 2);
    //設(shè)置cChildNode2的節(jié)點(diǎn)值
    cChildNode2.appendChild(xDoc.createTextNode("cChildNode2 Val"));
    //將cChildNode2節(jié)點(diǎn)添加到多級(jí)節(jié)點(diǎn)中
    childNode2.appendChild(cChildNode2);

    //將多級(jí)節(jié)點(diǎn)childNode2添加到根節(jié)點(diǎn)中
    root.appendChild(childNode2);

    //指定xml文件路徑
    QFile file("./xmlTest.xml");
    //以只讀方式打開(kāi),并且會(huì)清空文件內(nèi)容
    if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
        return 0;
    //使用文本流寫(xiě)入文件
    QTextStream outputStream(&file);
    xDoc.save(outputStream, 4); //縮進(jìn)四格
    file.close();

三、XML文件的讀取

3.1 文件讀取源碼

下方為XML文件讀取的源碼,其中代碼內(nèi)容按順序如下:

  • 創(chuàng)建QDomDocument對(duì)象并打開(kāi)文件添加其數(shù)據(jù)源
  • 獲取根節(jié)點(diǎn)
  • 讀取較為簡(jiǎn)單的子節(jié)點(diǎn)(僅一個(gè)屬性和節(jié)點(diǎn)值)
  • 讀取較為復(fù)雜的子節(jié)點(diǎn)(包含屬性和不同的)
//創(chuàng)建QDomDocument對(duì)象
    QDomDocument xDoc;
    //指定讀取的xml文件路徑
    QFile file("./xmlTest.xml");
    //xml文件以只讀方式打卡
    if (!file.open(QIODevice::ReadOnly))
        return 0;
    //調(diào)用setContent函數(shù)設(shè)置數(shù)據(jù)源
    if (!xDoc.setContent(&file)) {
        file.close();
        return 0;
    }
    file.close();

    //獲取xDoc中的QDomElement對(duì)象
    QDomElement docElem = xDoc.documentElement();
    //獲取docElem的根節(jié)點(diǎn)
    QDomNode node = docElem.firstChild();


    //!獲取第一個(gè)子節(jié)點(diǎn),并讀取其屬性及其值
    QDomElement  childNode1 = node.toElement();
    //獲取childNode1的屬性值
    QString attri1 = childNode1.attribute("attruKey");
    //獲取childNode1的節(jié)點(diǎn)值(既然設(shè)置節(jié)點(diǎn)值需要插入子節(jié)點(diǎn),那么讀取也應(yīng)讀取其子節(jié)點(diǎn))
    QDomNode node1Child = childNode1.firstChild();
    QString node1Val = node1Child.nodeValue();

    //輸出屬性值和節(jié)點(diǎn)值
    qDebug() << "第一個(gè)子節(jié)點(diǎn)的屬性值和節(jié)點(diǎn)值";
    qDebug() << attri1 << node1Val;

    //將節(jié)點(diǎn)移至下一節(jié)點(diǎn)的位置
    node = node.nextSibling();

    //! 獲取第二個(gè)節(jié)點(diǎn),并使用循環(huán)獲取其中的各值
    QDomElement  childNode2 = node.toElement();
    qDebug() << "第二節(jié)點(diǎn)的讀取";
    //獲取childNode1的屬性值
    QString attri2 = childNode2.attribute("attruKey");
    qDebug() << "第二節(jié)點(diǎn)的屬性值:" << attri2;

    //獲取第二節(jié)點(diǎn)中的第一子節(jié)點(diǎn)
    QDomNode cChildNode = childNode2.firstChild();
    while(!cChildNode.isNull()) {
        //獲取當(dāng)前子節(jié)點(diǎn)的對(duì)象
        QDomElement e = cChildNode.toElement();
        if(!e.isNull()) {
            qDebug() << e.firstChild().nodeValue(); // the node really is an element.
        }
        //獲取下一節(jié)點(diǎn)元素
        cChildNode = cChildNode.nextSibling();
    }

3.2 讀取結(jié)果示例

下方為XML文件讀取輸出示例

總結(jié)

XML文件使用QDomDocument對(duì)象寫(xiě)入和讀取時(shí)需要注意如下事項(xiàng),在寫(xiě)入時(shí)需要添加QDomText對(duì)象設(shè)置值;而在讀取時(shí)需要讀取其首個(gè)子節(jié)點(diǎn),并獲取其中的值。(越復(fù)雜的文件結(jié)構(gòu),需要更復(fù)雜的代碼去讀和寫(xiě))

到此這篇關(guān)于Qt讀寫(xiě)XML文件(含源碼+注釋)的文章就介紹到這了,更多相關(guān)Qt讀寫(xiě)XML文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

相關(guān)文章

  • C語(yǔ)言執(zhí)行時(shí),程序控制臺(tái)輸出窗口 一閃而過(guò)問(wèn)題及解決

    C語(yǔ)言執(zhí)行時(shí),程序控制臺(tái)輸出窗口 一閃而過(guò)問(wèn)題及解決

    這篇文章主要介紹了C語(yǔ)言執(zhí)行時(shí),程序控制臺(tái)輸出窗口 一閃而過(guò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • OpenCV?通過(guò)Mat遍歷圖像的方法匯總

    OpenCV?通過(guò)Mat遍歷圖像的方法匯總

    對(duì)圖像中的所有點(diǎn)或特殊點(diǎn)進(jìn)行運(yùn)算,所以遍歷圖像就顯得很重要,如何高效的遍歷圖像是一個(gè)很值得探討的問(wèn)題,本文給大家?guī)?lái)了多種方法操作OpenCV?通過(guò)Mat遍歷圖像,感興趣的朋友一起看看吧
    2022-02-02
  • C++中COM組件初始化方法實(shí)例分析

    C++中COM組件初始化方法實(shí)例分析

    這篇文章主要介紹了C++中COM組件初始化方法,涉及C++中COM組件的使用技巧,需要的朋友可以參考下
    2015-05-05
  • 深入解讀C語(yǔ)言中的符號(hào)常量EOF

    深入解讀C語(yǔ)言中的符號(hào)常量EOF

    這篇文章主要介紹了C語(yǔ)言中的符號(hào)常量EOF,文中還介紹了EOF的驗(yàn)證和打印方法,需要的朋友可以參考下
    2015-11-11
  • VS2019和VS2022項(xiàng)目兼容性問(wèn)題的解決

    VS2019和VS2022項(xiàng)目兼容性問(wèn)題的解決

    在VS2019中打開(kāi)被VS2022打開(kāi)過(guò)的項(xiàng)目時(shí)出現(xiàn)兼容性問(wèn)題,可以通過(guò)修改項(xiàng)目解決方案文件(.sln)和項(xiàng)目文件(.vcxproj)中的版本號(hào)來(lái)解決
    ,下面就來(lái)介紹一下,感興趣的可以了解一下
    2024-12-12
  • opengl繪制五星紅旗

    opengl繪制五星紅旗

    這篇文章主要為大家詳細(xì)介紹了opengl繪制五星紅旗的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • C語(yǔ)言菜鳥(niǎo)基礎(chǔ)教程之?dāng)?shù)據(jù)類型

    C語(yǔ)言菜鳥(niǎo)基礎(chǔ)教程之?dāng)?shù)據(jù)類型

    在 C 語(yǔ)言中,數(shù)據(jù)類型指的是用于聲明不同類型的變量或函數(shù)的一個(gè)廣泛的系統(tǒng)。變量的類型決定了變量存儲(chǔ)占用的空間,以及如何解釋存儲(chǔ)的位模式。
    2017-10-10
  • Qt QML使用虛擬鍵盤(pán)的示例代碼

    Qt QML使用虛擬鍵盤(pán)的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Qt QML使用虛擬鍵盤(pán)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • VC++進(jìn)度條process Bar的用法實(shí)例

    VC++進(jìn)度條process Bar的用法實(shí)例

    這篇文章主要介紹了VC++進(jìn)度條process Bar的用法,是進(jìn)行VC++應(yīng)用程序開(kāi)發(fā)中非常常見(jiàn)的實(shí)用技巧,需要的朋友可以參考下
    2014-10-10
  • C語(yǔ)言編程計(jì)算信噪比SNR理解學(xué)習(xí)

    C語(yǔ)言編程計(jì)算信噪比SNR理解學(xué)習(xí)

    這篇文章主要介紹了C語(yǔ)言編程信噪比SNR計(jì)算的理解學(xué)習(xí),信噪比,英文名稱叫做SNR或S/N(SIGNAL-NOISE RATIO)。是指一個(gè)電子設(shè)備或者電子系統(tǒng)中信號(hào)與噪聲的比例
    2021-10-10

最新評(píng)論

长武县| 修武县| 建湖县| 禄劝| 贵州省| 新蔡县| 宜章县| 鄂伦春自治旗| 霞浦县| 尚义县| 垣曲县| 濮阳市| 高安市| 中西区| 长汀县| 阳信县| 翁源县| 堆龙德庆县| 沈丘县| 大石桥市| 牟定县| 沾化县| 霸州市| 西乌珠穆沁旗| 蒙自县| 赣州市| 辉县市| 观塘区| 四川省| 桐柏县| 缙云县| 织金县| 灌南县| 盐津县| 太和县| 龙州县| 石门县| 兴安盟| 五指山市| 太原市| 同德县|