以编程方式编辑xlsx XML会导致它损坏

所以我在Qt 5.6中创build一个Qt程序,读取和写入Excel文件(使用Qt Xlsx 0.3)。 有一个我想编辑的drawing.xml文件,所以我使用QDomDocument来做到这一点。 我只改变一件事,从:

<a:p> <a:pPr rtl="0"/> <a:r> <a:rPr b="0" baseline="0" i="0" lang="en-GB" sz="1100"> <a:effectLst/> <a:latin typeface="+mn-lt"/> <a:ea typeface="+mn-ea"/> <a:cs typeface="+mn-cs"/> </a:rPr> <a:t>J1: 0 </a:t> </a:r> </a:p> 

对此:

  <a:p> <a:pPr rtl="0"/> <a:r> <a:rPr b="0" baseline="0" i="0" lang="en-GB" sz="1100"> <a:effectLst/> <a:latin typeface="+mn-lt"/> <a:ea typeface="+mn-ea"/> <a:cs typeface="+mn-cs"/> </a:rPr> <a:t>TESTING</a:t> </a:r> </a:p> 

我把它放回到graphics文件夹并压缩了xlsx文件,但是当我打开xlsx文件时,graphics已经损坏,并且被删除。 所以我使用了一个diffchecker来确保这些xml文件中的其他内容都是相同的,并且注意到Qt也对它进行了一些修改。

从:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

至:

 <?xml version='1.0' encoding='UTF-8' standalone='yes'?> 

好的,无论如何,我把单引号编辑成双引号,现在差异检查器显示没有差异。 我把这个图画放回到excel文件里面,然后压缩,但是当我打开xlsx文件的时候,绘图仍然被删除,因为它已经被破坏了!

我以为可能有编辑xml文件本身的问题,所以我试着手工编辑drawing.xml文件。 我做了以前显示的相同的变化(只是“testing”,并留下双引号),当我压缩回xlsx文件没有问题!

我很困惑什么导致这个问题,因为差异检查器显示之间的XML文件没有区别,但是当我尝试将它们压缩成XLSX文件,由Qt编程创build一个是损坏的,而手编辑一个是精细。 造成这个问题的原因是什么?

编辑:这是我正在运行的Qt代码:

 QDomDocument doc; QString temp; int y, j; QFile xml("C:/Users/dillo/Desktop/drawing2.xml"); if (!xml.open(QIODevice::ReadOnly)) { qDebug() << "file didnt open"; } if (!doc.setContent(&xml, false, &temp, &y, &j)) { qDebug() << "Failed"; qDebug() << temp << " " << y << " " << j; } QDomNodeList items = doc.elementsByTagName("a:r"); QDomNode node = items.at(1); QDomNodeList children = node.childNodes(); QDomElement newNodeTag = doc.createElement(QString("a:t")); QDomText newNodeText = doc.createTextNode(QString("TESTING")); newNodeTag.appendChild(newNodeText); node.replaceChild(newNodeTag, children.at(1)); xml.close(); xml.open(QIODevice::WriteOnly); QTextStream stream(&xml); stream << doc.toString(); xml.close();