使用DataSet.WriteXml(Stream)丢失XML文件声明

时间:2008-12-25 08:28:58

标签: c# dataset

我有一个包含一些数据的数据集。当我尝试将此DataSet写入文件时,一切正常。但是当我尝试将其写入MemoryStream时,XML文件声明丢失了。 代码如下:

DataSet dSet = new DataSet();
//load schema, fill data in
dSet.WriteXML("testFile.xml");
MemoryStream stream = new MemoryStream();
dSet.WriteXML(stream);
stream.Seek(0,SeekOrigin.Begin);

当我打开文件testFile.xml时,我得到了:

<?xml version="1.0" standalone="yes"?>
//balabala

但是当我用StreamReader打开流时,我只得到了:

//balabala

有人说我可以手动在我的流中插入XML文件声明。它有效,但看起来很难看。你知道为什么它放弃了第一行和更简单的解决方案吗?

3 个答案:

答案 0 :(得分:3)

没有掉线。根本不包括在内。虽然强烈建议xml声明不是xml规范的必需元素。

http://msdn.microsoft.com/en-us/library/ms256048(VS.85).aspx

您可以使用XmlWriter.WriteStartDocument在流中包含xml声明,如下所示:

MemoryStream stream = new MemoryStream();
var writer = XmlWriter.Create(stream);
writer.WriteStartDocument(true);
dSet.WriteXML(stream);

答案 1 :(得分:0)

我使用DataTable尝试您的解决方案,但无法正常工作。

using (MemoryStream stream = new MemoryStream()) {
    using (XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8)) {
        writer.WriteStartDocument(); //<?xml version="1.0" encoding="utf-8"?>
        writer.WriteRaw("\r\n"); //endline
        writer.Flush(); //Write immediately the stream
        dTable.WriteXml(stream);
    }
}

答案 2 :(得分:0)

如果您反汇编2.0代码,您将看到采用文件名的WriteXml方法明确地写出声明(XmlWriter.WriteStartDocument),但是WriteXml方法采用流或作家没有。