Вы почти наверняка пытаетесь решить не ту проблему здесь. Если вам нужен текст с неразрывными пробелами, вам следует использовать символ неразрывный пробел . В строковом литерале C # вы можете записать его как escape-последовательность \u00A0
, например:
var xmldoc = new XmlDocument();
XmlElement test = xmldoc.CreateElement("test");
xmldoc.AppendChild(test);
XmlText nbsp = xmldoc.CreateTextNode("\u00A0");
test.AppendChild(nbsp);
HTML-сущности, такие как nbsp
, являются просто способом кодирования таких символов в текстовом файле, не поддерживающем юникод. Вы не должны использовать их при создании XML DOM. Кстати, если вы заставите .NET записать вышеупомянутый DOM в файл в кодировке ASCII (через надлежащие XmlWriterSettings), то он, вероятно, запишет символ неразрывного пробела как  
. В файле в кодировке UTF-8 (по умолчанию) он будет отображаться в виде пробела.
Если вы заставите определенные буквенные последовательности символов появляться в выводе XML, то вы рискуете создать недопустимый XML, который не может быть загружен соответствующими процессорами XML. Например, попробуйте загрузить <test>
& nbsp; </test>
в пустом XmlDocument
. Это бросит исключение. Чтобы быть справедливым, вы можете объявлять такие объекты, и схема XHTML делает это. Но я надеюсь, что вы понимаете мою точку зрения.
edit : XmlDocument выполняет свою работу правильно. Если он не будет экранировать символы, такие как & <>, вы можете создать недопустимый XML, который невозможно загрузить снова. Для принудительного создания сущности XML в выводе вы должны использовать XmlDocument.CreateEntityReference . Ошибка заключается в том, что любой код использует сущности в узлах XmlText вместо генерации узлов XmlEntityReference.