1

我需要将 DataSet 导出到 XML,但所有具有 DBNull 值的单元格都会从最终的 XML 文件中消失。DBNull 值位于表的中间,因此列(在具有 dbnull 的行中)会移动并破坏整个表。

public static string GetXmlFromDataSet(DataSet ds)
            {
                try
                {
                    StringWriter sw = new StringWriter();
                    ds.WriteXml(sw);
                    string outputXml = sw.ToString();

                    return outputXml;
                }
                catch (Exception ex)
                {
                    return ex.ToString();
                }
            }

然后 XslCompiledTransform 使文件对 MS Excel 可读。但如果没有一些细胞,它就无法使用。我需要帮助。

4

1 回答 1

1

我编写了 XML 解析器,它解决了这个问题。当DataSet.WriteXML看到DBNULL数据集中的值时,它不会记录到 XML 文件中。

标准方法DataSet.WriteXML有一个属性XmlWriteMode。如果您XmlWriteMode.WriteSchema在 XML 文件的顶部使用 WriteXML 方法记录架构。但是,如果您将它转换为 XML 到 DataSet,它就可以工作。在我的情况下,XML 文件使用 转换为 Excel XslCompiledTransform,因此架构无法帮助我。

这是我的解决方案的代码:

try
{
   StringWriter sw = new StringWriter();

   //ds.WriteXml(sw, XmlWriteMode.IgnoreSchema);
   DataTable dt = ds.Tables[0];
   sw.Write(@"<NewDataSet>");
   foreach (DataRow row in dt.Rows)
   {
      sw.Write(@"<Table>");
      foreach (DataColumn col in dt.Columns)
      {
         sw.Write(@"<" + XmlConvert.EncodeName(col.ColumnName) + @">");
         sw.Write(row[col]);
         sw.Write(@"</" + XmlConvert.EncodeName(col.ColumnName) + @">");
      }
      sw.Write(@"</Table>");
   }
   sw.Write(@"</NewDataSet>");
   return sw.ToString();
}
catch (Exception ex)
{
   return ex.ToString();
}
于 2012-06-05T05:15:27.903 回答