Удалить кодировку из XmlWriter

#c# #xml

#c# #xml

Вопрос:

Я использую XmlWriter и XmlWriterSettings для записи XML-файла на диск. Однако система, которая анализирует XML-файл, жалуется на кодировку.

 <?xml version="1.0" encoding="utf-8"?>
 

Чего он хочет, так это:

 <?xml version="1.0" ?>
 

Если я попытаюсь OmitXmlDeclaration = true, то я вообще не получу строку xml.

 string destinationName = "C:\temp\file.xml";
string strClassification = "None";

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;

using (XmlWriter writer = XmlWriter.Create(destinationName, settings))
{
    writer.WriteStartDocument();
    writer.WriteStartElement("ChunkData");
    writer.WriteElementString("Classification", strClassification);
    writer.WriteEndElement();
}
 

Комментарии:

1. Вы уверены, что система жалуется на encoding атрибут? Я думаю, что он жалуется на кодировку всего XML.

2. However, the system that is parsing the XML file is complaining about the encoding. Где это код? Похоже, это проблема XY

3. addy, да, это, вероятно, кодировка. Я думал, что удаление этого тега исправит это, но, видимо, нет. Л.Б., я не могу контролировать код другой системы. Они предоставили XML-файлы, которые отлично обрабатывались и не имели тега encoding .

4. encoding Атрибут здесь только для того, чтобы помочь анализатору определить, какая кодировка используется в файле, но даже если ее там нет, кодировка есть… Попробуйте установить settings.Encoding = Encoding.Default

5. cookcomputing.com/blog/archives/000577.html

Ответ №1:

Просто столкнулся с этим —

  1. удалите XmlWriterSettings() все и используйте XmlTextWriter()'s Formatting поле для отступа.
  2. передать в null Encoding качестве аргумента XmlTextWriter's ctor

Следующий код создаст результат, который вы ищете: <?xml version="1.0" ?>

 var w = new XmlTextWriter(filename, null);
w.Formatting = Formatting.Indented; 
w.WriteStartDocument(); 
w.WriteStartElement("ChunkData");
w.WriteEndDocument(); 
w.Close();
 

.Close() Эффективно создает файл — using Create() подход and также будет работать.

Комментарии:

1. К сожалению, XmlTextWriter не может выполнять запись в StringBuilder . (или строка , если на то пошло)

2. @IanBoyd — не пробовал этого, но при необходимости вы всегда можете записать файл и прочитать его содержимое в строку…