Сохранение XML-файла из одного местоположения в другое, используя XML DOCUMENT

При сохранении существующего XML-файла в новом месте сущности покинули содержимое и заменили знак вопроса

Посмотрите снимки ниже объекта - (- как Hex), присутствующего во время чтения, но его заменили знаком вопроса после сохранения в другом месте.

Читая как внутренний XML

Читая как внутренний XML

Читая как внутренний текст

Читая как внутренний текст

После сохранения файла 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 нет и этой проблемы!

Другие вопросы по тегам