#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.
Где это код? Похоже, это проблема XY3. addy, да, это, вероятно, кодировка. Я думал, что удаление этого тега исправит это, но, видимо, нет. Л.Б., я не могу контролировать код другой системы. Они предоставили XML-файлы, которые отлично обрабатывались и не имели тега encoding .
4.
encoding
Атрибут здесь только для того, чтобы помочь анализатору определить, какая кодировка используется в файле, но даже если ее там нет, кодировка есть… Попробуйте установитьsettings.Encoding = Encoding.Default
Ответ №1:
Просто столкнулся с этим —
- удалите
XmlWriterSettings()
все и используйтеXmlTextWriter()'s Formatting
поле для отступа. - передать в
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 — не пробовал этого, но при необходимости вы всегда можете записать файл и прочитать его содержимое в строку…