使用DBNull单元格将数据集转换为xml

时间:2012-05-30 05:54:13

标签: c# asp.net xml dataset

我需要将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可读。但是没有一些细胞它就无法使用。我需要帮助。

1 个答案:

答案 0 :(得分:1)

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

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

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

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();
}