现在我们再讲一下应该怎么把数据写成XML文件。
还是以例子入手,假设我们已经有了前面章节例子的数据,这一节我们考虑怎么把这些数据按照xml文件格式写入到xml文件里面。
首先列一下我们需要写入的数据:
写入的第一件事:打开文件。QString fileName{ "Motor.xml" }; QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { qDebug() << "open for add error!!"; } //输出到文件 QTextStream out_stream(&file); out_stream<<"It is a test. "; file.close(); 运行以后打开文件,里面出现了It is a test. 的字样,表示文件成功打开了。
接下来就是创建XML的数据结构了:
//打开或创建文件 QString fileName{ "Motor.xml" }; QFile file(fileName);
QDomDocument doc;
QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml",
"version="1.0" encoding="UTF-8"");
doc.appendChild(instruction);
/以后内容都在这里逐步补全/
//输出到文件 QTextStream out_stream(&file); doc.save(out_stream, 4); //缩进4格 file.close(); 首先创建一个fileName文件,然后使用QDomDocument 创建一个对象,接下来就很简单明白了,注意要把instruction加入到doc的子节点里面。否则啥也不会输出到文件里去。
输入结果如下:
之后我们要把根节点加进去:
QDomElement root = doc.documentElement(); root = doc.createElement("ROOT"); doc.appendChild(root); 注意这里的root是一个QDomElement元素,直接加到了doc的子节点里,这时候文件输出如下:
要注意的是,这个和可不是同一个东西!展开就可以写作。如果我们强行加了两个根节点进去,虽然输出没有问题,但是用浏览器等打开是会有问题的。 再在下面写入:QDomElement mode = doc.documentElement();
mode = doc.createElement("Mode");
QDomElement mode2 = doc.documentElement();
mode2 = doc.createElement("Mode2");
root.appendChild(mode);
root.appendChild(mode2);
和上面类似,只不过我们是把mode加入到了root的子节点里,效果显示如下:
之后,我们要在Mode里添加子节点。程序以及显示效果如下:QDomElement firstEle = doc.documentElement();
firstEle = doc.createElement("firstEle");
QDomElement secondEle = doc.documentElement();
secondEle = doc.createElement("secondEle");
QDomElement firstEle2 = doc.documentElement();
firstEle2 = doc.createElement("firstEle2");
QDomElement secondEle2 = doc.documentElement();
secondEle2 = doc.createElement("secondEle2");
mode.appendChild(firstEle);
mode.appendChild(secondEle);
mode2.appendChild(firstEle2);
mode2.appendChild(secondEle2);