Как НЕ писать XML с красивой печатью из C # DataSet - PullRequest
8 голосов
/ 08 января 2009

В C # как записать DataSet в файл, если он не был написан с красивой печатью?

Используя C # и .NET 2.0, я использовал dataSet.WriteXml (fileName, XmlWriteMode.IgnoreSchema), который по умолчанию пишет файл Xml с красивой печатью. Компания, использующая Xml-файлы, которые я пишу, предположила, что написание без красивого шрифта не повлияет на них и значительно уменьшит размер файлов. Немного поиграв в пространстве имен System.Xml, я нашел решение. Однако в процессе поиска я нигде не нашел ответа, поэтому подумал, что в будущем это может быть полезно для кого-то другого, если я опубликую вопрос. Кроме того, я совсем не удивлюсь, если есть лучший или хотя бы другой способ сделать это.

Для тех, кто не знает (я не знал до сегодняшнего дня), Xml "Pretty Print" это:

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <Foo>
    <Bar>abc</Bar>
  </Foo>
</NewDataSet>

Без красивой печати это выглядит так:

<?xml version="1.0" encoding="utf-8"?><NewDataSet><Foo><Bar>abc</Bar></Foo></NewDataSet>

Кроме того, была достигнута значительная экономия по размеру, 70 МБ файлов становятся примерно 40 МБ. Я опубликую свое решение позже сегодня, если ни у кого нет.

Ответы [ 4 ]

8 голосов
/ 08 января 2009

Это довольно просто, вам просто нужно создать XmlWriter, используя XmlWriterSettings, у которого для свойства Indent установлено значение false:

// The memory stream for the backing.
using (MemoryStream ms = new MemoryStream())
{
  // The settings for the XmlWriter.
  XmlWriterSettings settings = new XmlWriterSettings();

  // Do not indent.
  settings.Indent = false;

  // Create the XmlWriter.
  using (XmlWriter xmlWriter = XmlWriter.Create(ms, settings))
  {
     // Write the data set to the writer.
     dataSet.WriteXml(xmlWriter);
  }
}
6 голосов
/ 08 января 2009

Даже проще, чем с помощью XmlWriterSettings:

XmlTextWriter xml = new XmlTextWriter(fileName, Encoding.UTF8) 
    { Formatting = Formatting.None };
dataSet.WriteXml(xml);
2 голосов
/ 08 января 2009

Вот что я бы попробовал ...:

РЕДАКТИРОВАТЬ: (не компилируется, настройки должны быть добавлены в конструктор XmlWriter.Create - но теория есть.)

DataSet ds = new DataSet();
System.Xml.XmlTextWriter xmlW = new System.Xml.XmlTextWriter("C:\\temp\\dataset.xml");
System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
settings.Indent = false;
settings.NewLineChars = String.Empty;
xmlW.Settings = settings;
ds.WriteXml(xmlW);
1 голос
/ 08 января 2009

Если невозможно повлиять на форматирование набора данных xml, я просто загружаю xml в новый XMLDocument и отправляю XMLDocument.OuterXml, который форматирует бесплатно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...