0

我有一个包含一些数据的数据集。当我尝试将此 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 文件声明。它有效,但看起来很丑。你知道为什么它放弃了第一行以及更简单的解决方案吗?

4

3 回答 3

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);
于 2009-03-27T03:54:16.830 回答
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);
    }
}
于 2010-01-15T14:34:32.583 回答
0

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

于 2011-06-14T16:46:54.400 回答