如何用C#DataSet中的漂亮打印来编写XML

时间:2009-01-08 16:13:46

标签: c# xml

在C#中,如果没有使用漂亮的打印文件,你如何编写一个DataSet文件?

使用C#和.NET 2.0,我一直在使用dataSet.WriteXml(fileName,XmlWriteMode.IgnoreSchema),默认情况下是使用漂亮的打印来编写Xml文件。使用我写的Xml文件的公司建议,没有漂亮打印的写入不会影响它们,并且会显着减小文件的大小。稍微在System.Xml命名空间中玩,我找到了一个解决方案。但是,在我的搜索中,我没有在任何地方找到答案,所以我认为如果我发布问题,将来可能对其他人有所帮助。此外,如果有更好或至少不同的方式来实现这一点,我不会感到惊讶。

对于那些不知道的人(直到今天我都没有),Xml“漂亮的印刷品”是:

<?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>

此外,尺寸节省显着,70mb文件变得大约40mb。如果其他人没有,我今天晚些时候会发布我的解决方案。

4 个答案:

答案 0 :(得分:8)

这非常简单,您只需使用XmlWriter创建XmlWriterSettingsIndent属性设置为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);
  }
}

答案 1 :(得分:6)

比使用XmlWriterSettings更容易:

XmlTextWriter xml = new XmlTextWriter(fileName, Encoding.UTF8) 
    { Formatting = Formatting.None };
dataSet.WriteXml(xml);

答案 2 :(得分:2)

这就是我想要的......:

编辑:(不编译,需要在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);

答案 3 :(得分:1)

如果无法影响数据集xml的格式化,我只需将xml加载到新的XMLDocument中,然后发送格式化的XMLDocument.OuterXml。