5 votes

Pourquoi Qt perd-il mon caractère unicode "thin space" lors du chargement d'un fichier XML ?

J'ai un document XML, dont une partie contient les éléments suivants :

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

Si cela est chargé dans Qt (spécifiquement le widget Qt MathML où j'ai trouvé ce problème), l'objet QDomDocument perd le caractère unicode thin space (U+2009). Cet exemple de code Python démontre le problème :

from PyQt4.QtXml import *

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

La sortie de ce code est :

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

L'insertion d'un caractère supplémentaire sans espace après l'espacement fin empêche la perte de l'espacement fin.

S'agit-il d'une erreur de ma part, d'une fonctionnalité XML ou d'un bug de Qt ?

5voto

De Documentation de QDomDocument :

Les nœuds de texte composés uniquement d'espaces sont supprimés et n'apparaissent pas. dans le QDomDocument. Si ce comportement n'est pas souhaité, on peut utiliser la fonction setContent() qui permet de fournir un QXmlReader.

De cette façon, vous ne perdez pas les données de l'espace blanc uniquement (l'exemple est en C++) :

QXmlSimpleReader reader;
QXmlInputSource source;
QDomDocument dom;

source.setData(QString("<mtext>&#x2009;</mtext>"));
dom.setContent(&source, &reader);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X