溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Qt Dom方式寫xml,以及保存到xml文件中

發(fā)布時(shí)間:2020-08-01 18:51:37 來源:網(wǎng)絡(luò) 閱讀:4128 作者:小溢 欄目:開發(fā)技術(shù)
#include <QString>
#include <QDebug>
#include <stdio.h>
#include <stdlib.h>
#include <QDomDocument>
#include <QtXml>

//XML DOM的方式
int main(int argc, char *argv[])
{
    QByteArray array;

    QDomDocument doc;
    QDomProcessingInstruction instruction;
    QDomText text;

    instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");

    doc.appendChild(instruction);                       //doc開頭加入instruction
    QDomElement root = doc.createElement("root");       //創(chuàng)建root節(jié)點(diǎn)
    QDomElement common = doc.createElement("common");   //創(chuàng)建節(jié)點(diǎn)common
    QDomElement meters = doc.createElement("meters");   //創(chuàng)建節(jié)點(diǎn)meters
    QDomElement meter = doc.createElement("meter");
    QDomElement function = doc.createElement("function");

    meters.setAttribute("total", "0");                  //設(shè)置屬性名字和值
    meter.setAttribute("id", "0001");
    meter.setAttribute("name", "0001");

    function.setAttribute("id", "01");                //
    function.setAttribute("error", "");

    meters.appendChild(meter);
    common.appendChild(meters);                         //將meters節(jié)點(diǎn)添加到common節(jié)點(diǎn)中
    doc.appendChild(root);                              //將root節(jié)點(diǎn)添加到doc
    root.appendChild(common);                           //將common節(jié)點(diǎn)添加到root節(jié)點(diǎn)中
    meter.appendChild(function);


    meters.setAttribute("total", "12");
    array = doc.toByteArray();

    printf("%s", array.data());

    //將xml保存到文件中
    QFile file("./why.xml");

    file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text);
    QTextStream out(&file);
    out.setCodec("UTF-8");
    doc.save(out, 4, QDomNode::EncodingFromTextStream);

    file.close();

    return 0;
}


輸出的xml內(nèi)容為:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <common>
        <meters total="12">
            <meter id="0001" name="0001">
                <function error="" id="01"/>
            </meter>
        </meters>
    </common>
</root>


DOM方式,在內(nèi)存中形成一個(gè)樹狀結(jié)構(gòu),在內(nèi)存中可以實(shí)時(shí)的改變xml中的內(nèi)容。但是耗內(nèi)存較大,在xml內(nèi)容較少時(shí)可以考慮使用。

而SAX,

QXmlStreamWriter的方式是順序的,只能按照順序去添加xml內(nèi)容,無法回頭在改動(dòng)xml的內(nèi)容。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI