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