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 に答える