Сохранение XML-файла из одного местоположения в другое, используя XML DOCUMENT
При сохранении существующего XML-файла в новом месте сущности покинули содержимое и заменили знак вопроса
Посмотрите снимки ниже объекта - (- как Hex), присутствующего во время чтения, но его заменили знаком вопроса после сохранения в другом месте.
Читая как внутренний XML
Читая как внутренний текст
После сохранения файла XML
РЕДАКТИРОВАТЬ 1 Ниже мой код
string path = @"C:\work\myxml.XML";
string pathnew = @"C:\work\myxml_new.XML";
//GetFileEncoding(path);
XmlDocument document = new XmlDocument();
XmlDeclaration xmlDeclaration = document.CreateXmlDeclaration("1.0","US-ASCII",null);
//document.CreateXmlDeclaration("1.0", null, null);
document.Load(path);
string x = document.InnerText;
document.Save(pathnew);
РЕДАКТИРОВАТЬ 2 Мой исходный файл выглядит как ниже. Мне нужно сохранить сущности как есть
1 ответ
Проблема здесь, кажется, заключается в обработке кодирования ссылок на сущности конкретными XmlWriter
реализация внутри XmlDocument
,
Проблема исчезнет, если вы создадите XmlWriter
себя - неподдерживаемый символ будет правильно закодирован как ссылка на сущность. это XmlWriter
это другая (и более новая) реализация, которая устанавливает EncoderFallback
который кодирует символы как ссылки на объекты для символов, которые не могут быть закодированы. Согласно примечаниям в документах, механизм возврата по умолчанию заключается в кодировании знака вопроса.
var settings = new XmlWriterSettings
{
Indent = true,
Encoding = Encoding.GetEncoding("US-ASCII")
};
using (var writer = XmlWriter.Create(pathnew, settings))
{
document.Save(writer);
}
Кроме того, я бы рекомендовал использовать LINQ to XML XDocument
API, с ним гораздо приятнее работать, чем со старым скрипучим XmlDocument
API. И ее версия Save
нет и этой проблемы!