我有一个 XML 文档,其中一部分包含以下内容:
<math display='block'><mtext> </mtext></math>
Run Code Online (Sandbox Code Playgroud)
如果将其加载到 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()))
Run Code Online (Sandbox Code Playgroud)
这段代码的输出是:
u'<math display="block">\n <mtext/>\n</math>\n'
Run Code Online (Sandbox Code Playgroud)
在细空格后插入一个额外的非空格字符会阻止细空格丢失。
这是我的错误、XML 功能还是 Qt 有错误?
小智 5
仅由空格组成的文本节点将被剥离并且不会出现在 QDomDocument 中。如果不需要这种行为,可以使用允许提供 QXmlReader 的 setContent() 重载。
所以这样你就不会丢失空白数据(示例在 C++ 中):
QXmlSimpleReader reader;
QXmlInputSource source;
QDomDocument dom;
source.setData(QString("<mtext> </mtext>"));
dom.setContent(&source, &reader);
Run Code Online (Sandbox Code Playgroud)