引言
由于项目需要,现学现卖,先将下面两个例子来记录一下。
示例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文件的生成,理解其意便可。