我有一个XML文档,其中一部分包含以下内容:
<math display='block'><mtext> </mtext></math>
如果将其加载到Qt(特别是我发现此问题的Qt MathML小部件),QDomDocument对象将丢失unicode精简空格字符(U + 2009)。这个Python示例代码演示了这个问题:
from PyQt4.QtXml import *
d = QDomDocument()
d.setContent("<math display='block'><mtext> </mtext></math>")
print repr(unicode(d.toString()))
此代码的输出为:
u'<math display="block">\n <mtext/>\n</math>\n'
在精简空间停止丢失精简空间后插入额外的非空格字符。
这是我的错误,XML功能,还是Qt有错误?
答案 0 :(得分:4)
来自QDomDocument's documentation:
仅剥离由空格组成的文本节点,不会出现 在QDomDocument中。如果不需要这种行为,可以使用 setContent()重载,允许提供QXmlReader。
因此,这样您就不会丢失仅限空格的数据(例如C ++中的代码):
QXmlSimpleReader reader;
QXmlInputSource source;
QDomDocument dom;
source.setData(QString("<mtext> </mtext>"));
dom.setContent(&source, &reader);