关于QT中创建有顺序的xml并以ANSI格式存储

‘正常情况下,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文件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值