‘正常情况下,QT中有专门创建xml格式的QDomDocument类,但是这个类创建的xml有一个问题,就是使用setattribute的顺序是不确定的,好像是因为其存储不是list,而是使用Map导致的:
QDomDocument doc;
// 添加XML声明
QDomNode xmlNode = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(xmlNode);
QDomElement root = doc.createElement("Content");
root.setAttribute("Unit", "1");
root.setAttribute("Version", "20190804");
root.setAttribute("PageCount", "1");
如果对xml的内容顺序有要求,可以使用QXmlStreamWriter,对每一个项目进行添加:
QByteArray xmlData;
QXmlStreamWriter xmlWriter(&xmlData);
xmlWriter.setCodec("UTF-8"); // 设置编码为 UTF-8
xmlWriter.setAutoFormatting(true);//设置自动换行
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("Content");
xmlWriter.writeAttribute("Unit", "1");
xmlWriter.writeAttribute("Version", "20190804");
xmlWriter.writeAttribute("PageCount", "1");
上述代码中使用到了QByteArray,是为了最后是将xml文档格式转为ANSI格式:
// 将 XML 数据转换为 ANSI 编码
QString xmlString = QString::fromUtf8(xmlData); // 将 QByteArray 转换为 QString
QTextCodec *codec = QTextCodec::codecForName("GBK");
// 将转换后的 ANSI 编码数据写入文件
QTextStream out(&file);
out.setCodec(codec);
out << xmlString;
这样最后得到的就是一个ANSI格式 的有顺序的xml文件。