В моем приложении C # данные XML могут содержать произвольный текст элемента, который уже был предварительно обработан, так что (среди прочего) недопустимые символы были преобразованы в их экранированную (закодированную сущность символа xml).
Пример: <myElement>this & that</myElement>
был преобразован в <myElement>this & that</myElement>
.
Проблема в том, что когда я использую XmlTextWriter для сохранения файла, '&' снова экранируется в <myElement>this &amp; that</myElement>
. Я не хочу, чтобы этот дополнительный & в строке.
Другой пример: <myElement>• bullet</myElement>
, моя обработка изменяет его на <myElement>• bullet</myElement>
, который сохраняется на <myElement>&#8226; bullet</myElement>
. Все, что я хочу выводить в файл - это форма <myElement>• bullet</myElement>
.
Я пробовал различные варианты на различных XmlWriters и т. Д., Но не могу получить необработанные строки для правильного вывода. И почему синтаксический анализатор XML не может распознавать и не переписывать уже действительные escape-коды?
обновление: после дополнительной отладки я обнаружил, что текстовые строки элементов (фактически все строки, включая теги элементов, имена, атрибуты и т. Д.) Кодируются всякий раз, когда они копируются в данные объекта .net xml ( Исключение составляют CDATA) внутренним классом с именем XmlCharType в System.Xml. Таким образом, проблема не имеет ничего общего с XmlWriters. Похоже, что лучший способ решить эту проблему - это отключить данные при выводе, либо используя что-то вроде:
string output = System.Net.WebUtility.HtmlDecode(xmlDoc.OuterXml);
Который, вероятно, превратится в пользовательский XmlWriter для сохранения форматирования и т. Д.
Спасибо всем за полезные предложения.