5

我有一个 XML 文档,其中一部分包含以下内容:

<math display='block'><mtext>&#x2009;</mtext></math>

如果将其加载到 Qt(特别是我发现此问题的 Qt MathML 小部件)中,则 QDomDocument 对象会丢失 unicode 细空格字符(U+2009)。这个 Python 示例代码演示了这个问题:

from PyQt4.QtXml import *

d = QDomDocument()
d.setContent("<math display='block'><mtext>&#x2009;</mtext></math>")
print repr(unicode(d.toString()))

这段代码的输出是:

u'<math display="block">\n <mtext/>\n</math>\n'

在细空格后插入一个额外的非空格字符会阻止细空格丢失。

这是我的错误,XML 特性,还是 Qt 有错误?

4

1 回答 1

5

来自QDomDocument 的文档

仅由空格组成的文本节点将被剥离并且不会出现在 QDomDocument 中。如果不需要这种行为,可以使用允许提供 QXmlReader 的 setContent() 重载。

所以这样你就不会丢失只有空格的数据(例如在 C++ 中):

QXmlSimpleReader reader;
QXmlInputSource source;
QDomDocument dom;

source.setData(QString("<mtext>&#x2009;</mtext>"));
dom.setContent(&source, &reader);
于 2012-06-10T16:59:24.770 回答