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