qt创建xml文件

引言

由于项目需要,现学现卖,先将下面两个例子来记录一下。

示例1

直接上代码,创建xml文件。

void Config::createServerInfoFile()
{
	QString strPath = "路径";//这里的路径是将要创建的xml的完整路径,包含文件名xxx.xml
    QFile file(strPath);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {//之前的内容被清空
        qDebug()<<QStringLiteral("打开")<<strPath<<QStringLiteral("文件失败!");
        return;
    }
    QDomDocument doc;
    QDomProcessingInstruction processInstruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
    doc.appendChild(processInstruction);

    QDomElement root = doc.createElement("server");
    doc.appendChild(root);

    QDomElement server1 = doc.createElement("helperIp");
    QDomText server1Text = doc.createTextNode("127.0.0.1");
    server1.appendChild(server1Text);
    root.appendChild(server1);

    QDomElement port1 = doc.createElement("sendPort");
    QDomText port1Text = doc.createTextNode("9999");
    port1.appendChild(port1Text);
    root.appendChild(port1);

    QDomElement port11 = doc.createElement("receviePort");
    QDomText port11Text = doc.createTextNode("9000");
    port11.appendChild(port11Text);
    root.appendChild(port11);

    QDomElement server2 = doc.createElement("kserver");
    QDomText server2Text = doc.createTextNode("192.168.1.5");
    server2.appendChild(server2Text);
    root.appendChild(server2);

    QDomElement port2 = doc.createElement("kPort");
    QDomText port2Text = doc.createTextNode("9080");
    port2.appendChild(port2Text);
    root.appendChild(port2);

    QDomElement upScreenServer = doc.createElement("upServer");
    QDomText upScreenServerText = doc.createTextNode("192.168.1.2");
    upScreenServer.appendChild(upScreenServerText);
    root.appendChild(upScreenServer);

    QDomElement upScreenPort = doc.createElement("upPort");
    QDomText upScreenPortText = doc.createTextNode("7999");
    upScreenPort.appendChild(upScreenPortText);
    root.appendChild(upScreenPort);

    QTextStream outFile(&file);
    doc.save(outFile,4);//缩进4格
    file.close();
}

创建的xml文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<server>
    <helperIp>127.0.0.1</helperIp>
    <sendPort>8900</sendPort>
    <receviePort>9666</receviePort>
    <kserver>127.0.0.1</kserver>
    <kPort>9080</kPort>
    <upServer>127.0.0.1</upServer>
    <upPort>7999</upPort>
</server>

下面是示例2,两个示例是一样的,若看完示例1已经明白大致怎么创建,此时就不需要看示例二了。
示例2:

const QString strKvmConfigFileName = "/kvmSeatSources.xml";

QString Config::getExeFilePath()
{
    QString strPath = QCoreApplication::applicationDirPath();
    return strPath;
}

void Config::createKvmSeatSourceFile()
{
    QString strPath = getExeFilePath();
    strPath += strKvmConfigFileName;
    QFile file(strPath);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {//之前的内容被清空
        qDebug()<<QStringLiteral("打开")<<strPath<<QStringLiteral("文件失败!");
        return;
    }

    QDomDocument doc;
    QDomProcessingInstruction processInstruct = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
    doc.appendChild(processInstruct);
    QDomElement root = doc.createElement("kvm");
    doc.appendChild(root);

    //创建第一个子节点
    QDomElement firstElement = doc.createElement("seatInfo");
    root.appendChild(firstElement);

    for (int i = 0; i < 12; ++i) {
        QDomElement seatElement = doc.createElement("seat");
        firstElement.appendChild(seatElement);
        QDomElement sidElement = doc.createElement("sid");
        QDomText sidText = doc.createTextNode("12");
        sidElement.appendChild(sidText);
        seatElement.appendChild(sidElement);
        QDomElement seatNameElement = doc.createElement("seatName");
        QDomText seatNameText = doc.createTextNode("admin1");
        seatNameElement.appendChild(seatNameText);
        seatElement.appendChild(seatNameElement);
        QDomElement seatIdElement = doc.createElement("seatId");
        QDomText seatIdText = doc.createTextNode("12289832899desa");
        seatIdElement.appendChild(seatIdText);
        seatElement.appendChild(seatIdElement);
        QDomElement seatIpElement = doc.createElement("seatIp");
        QDomText seatIpText = doc.createTextNode("192.168.1.20");
        seatIpElement.appendChild(seatIpText);
        seatElement.appendChild(seatIpElement);
    }

    //创建第二个子节点
    QDomElement secondElement = doc.createElement("signalsource");
    root.appendChild(secondElement);
    for (int i = 0; i < 12; ++i) {
        QDomElement sourceElement = doc.createElement("source");
        secondElement.appendChild(sourceElement);
        QDomElement uidElement = doc.createElement("uid");
        QDomText uidText = doc.createTextNode(QString::number(i+1));
        uidElement.appendChild(uidText);
        sourceElement.appendChild(uidElement);
        QDomElement ipElement = doc.createElement("ip");
        QDomText ipText = doc.createTextNode("192.168.1.2");
        ipElement.appendChild(ipText);
        sourceElement.appendChild(ipElement);
    }

    QTextStream outStream(&file);
    doc.save(outStream,4);
    file.close();
}

生成的文件的内容:

<?xml version='1.0' encoding='UTF-8'?>
<kvm>
    <seatInfo>
        <seat>
            <sid>12</sid>
            <seatName>席位1</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.32</seatIp>
        </seat>
        <seat>
            <sid>13</sid>
            <seatName>席位2</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.34</seatIp>
        </seat>
        <seat>
            <sid>14</sid>
            <seatName>席位3</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.22</seatIp>
        </seat>
        <seat>
            <sid>15</sid>
            <seatName>席位4</seatName>
            <seatId>12289832899feds</seatId>
            <seatIp>192.168.1.23</seatIp>
        </seat>
        <seat>
            <sid>16</sid>
            <seatName>席位5</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.24</seatIp>
        </seat>
        <seat>
            <sid>17</sid>
            <seatName>席位6</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.25</seatIp>
        </seat>
        <seat>
            <sid>18</sid>
            <seatName>席位7</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.26</seatIp>
        </seat>
        <seat>
            <sid>19</sid>
            <seatName>席位8</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.27</seatIp>
        </seat>
        <seat>
            <sid>20</sid>
            <seatName>席位9</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.28</seatIp>
        </seat>
        <seat>
            <sid>21</sid>
            <seatName>席位10</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.29</seatIp>
        </seat>
        <seat>
            <sid>22</sid>
            <seatName>席位11</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.30</seatIp>
        </seat>
        <seat>
            <sid>23</sid>
            <seatName>席位12</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.31</seatIp>
        </seat>
		  <seat>
            <sid>24</sid>
            <seatName>席位13</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.32</seatIp>
        </seat>
		  <seat>
            <sid>25</sid>
            <seatName>席位14</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.33</seatIp>
        </seat>
		  <seat>
            <sid>26</sid>
            <seatName>席位15</seatName>
            <seatId>12289832899desa</seatId>
            <seatIp>192.168.1.34</seatIp>
        </seat>
    </seatInfo>
    <signalsource>
        <source>
            <uid>1</uid>
            <ip>192.168.1.21</ip>
        </source>
        <source>
            <uid>2</uid>
            <ip>192.168.1.22</ip>
        </source>
        <source>
            <uid>3</uid>
            <ip>192.168.1.23</ip>
        </source>
        <source>
            <uid>4</uid>
            <ip>192.168.1.24</ip>
        </source>
        <source>
            <uid>5</uid>
            <ip>192.168.1.25</ip>
        </source>
        <source>
            <uid>6</uid>
            <ip>192.168.1.26</ip>
        </source>
        <source>
            <uid>7</uid>
            <ip>192.168.1.27</ip>
        </source>
        <source>
            <uid>8</uid>
            <ip>192.168.1.28</ip>
        </source>
		<source>
            <uid>9</uid>
            <ip>192.168.1.29</ip>
        </source>
		<source>
            <uid>10</uid>
            <ip>192.168.1.30</ip>
        </source>
    </signalsource>
</kvm>

以上是怎么生成xml文件,可能文件的某些字段的值对不上,是因为后期手动修改了,不影响xml文件的生成,理解其意便可。

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肩上风骋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值