【问题标题】:Lost XML file declaration using DataSet.WriteXml(Stream)使用 DataSet.WriteXml(Stream) 丢失 XML 文件声明
【发布时间】:2012-03-27 23:41:34
【问题描述】:

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

【问题讨论】:

    标签: c# dataset


    【解决方案1】:

    它没有被丢弃。根本不包括在内。虽然强烈建议 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 用于使用 XmlTextWriter,自 .NET 2.0 起已弃用。
    • 刚刚注意到您的评论。在我写它的时候,我正在使用 .NET 1.1。我已更新示例以使用 XmlWriter。
    【解决方案2】:

    我尝试使用 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);
        }
    }
    

    【讨论】:

    • 它做错了什么?顺便说一句,使用XmlWriter.Create 而不是new xmlTextWriter()XmlTextWriter 自 .NET 2.0 起已被弃用。
    • 如果您使用 DataTable 运行该代码,它首先会写入表,然后是声明。谢谢你的建议。我会尝试使用 XmlWriter.Create。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 2013-11-26
      • 2018-04-08
      相关资源
      最近更新 更多