2009-01-08 85 views
8

在C#中,如何将DataSet写入文件而不用漂亮的打印方式写入?使用C#和.NET 2.0,我一直在使用dataSet.WriteXml(fileName,XmlWriteMode.IgnoreSchema),默认情况下它使用漂亮的打印方式编写Xml文件。使用我编写的Xml文件的公司表示,没有漂亮打印的书写不会影响它们,并且会显着减小文件的大小。在System.Xml命名空间中稍微玩一下,我确实找到了一个解决方案。但是,在我的搜索中,我没有在任何地方找到答案,所以我认为如果我发布这个问题,未来的其他人可能会有所帮助。另外,如果有更好的或至少不同的方式来完成这一点,我一点也不会感到惊讶。如何不使用C#DataSet中的漂亮打印编写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。如果没有其他人,我会在今天晚些时候发布我的解决方案。

回答

8

这很简单,你只需要使用一个XmlWriterSettings它具有Indent属性设置为false,以创建一个XmlWriter

// 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); 
    } 
} 
+0

我也用settings.NewLineOneAttributes = false;但这几乎是我去过的地方 – 2009-01-08 17:35:30

1

如果不可能影响数据集xml的格式,我只需将xml加载到一个新的XMLDocument中,然后发送XMLDocument.OuterXml,它是免费的格式。

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); 
+0

Downvoted,因为它不能编译。 Settings属性没有设置存取器。 – casperOne 2009-01-08 16:30:28

+0

你说得很对。在创建设置后,作为XmlWriter.Create(“C:\\ temp \\ dataset.xml”,设置)会更好。 – cjk 2009-01-08 16:46:07

6

甚至比使用更方便XmlWriterSettings:

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