在XML中取空白值

时间:2013-10-08 09:39:36

标签: c# xml

以下是我用于从Excel工作表中获取XML格式数据的一段代码。但如果excel表中的值为空。 XML并没有将其视为价值。假设在excel中我的列名为EmployeeAddress,如果其为空,则应将标记关闭为<EmployeeAddress/>

daAdapter = new OleDbDataAdapter("Select * FROM [KDC Report$]", connection);
System.Data.DataTable dt = new System.Data.DataTable("Assets");
//daAdapter.FillSchema(dt, SchemaType.Source);
daAdapter.Fill(dt);

DataSet ds = new DataSet("DocumentElement");
ds.Tables.Add(dt);
var memoryStream = new MemoryStream();

using (TextWriter streamWriter = new StreamWriter(memoryStream))
{
    var xmlSerializer = new XmlSerializer(typeof(DataSet));
    xmlSerializer.Serialize(streamWriter, ds);
    Encoding.UTF8.GetString(memoryStream.ToArray());
}

ds.WriteXml("C:\\Development\\MyAppln\\ExcelToXML\\Products.xml");

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Linq to Xml,如下所示:

var xlContent = new XElement("Content", from row in dt.AsEnumerable()
                                                    select new XElement("Row", new XElement("Column1", row["Column1"]),
                                                                               new XElement("Column2", row["Column2"]),
                                                                               new XElement("Column3", row["Column3"]),
                                                                               new XElement("Column4", row["Column4"]))).ToString();

示例输出:

<Content>
  <Row>
    <Column1>1</Column1>
    <Column2>2</Column2>
    <Column3>3</Column3>
    <Column4>4</Column4>
  </Row>
  <Row>
    <Column1>5</Column1>
    <Column2></Column2>
    <Column3></Column3>
    <Column4>8</Column4>
  </Row>
</Content>

<强>更新

由于您有50多列,我已更新我的代码以遍历列集合。我无法在dt.Columns上使用LINQ,因为它没有实现IEnumerable<T>

var columnNames = new List<string>();
foreach (DataColumn column in dt.Columns)
{
    columnNames.Add(column.ColumnName);
}

var xlContent = new XElement("Content", from row in dt.AsEnumerable()
                                        select new XElement("Row", from columnName in columnNames
                                                                   select new XElement(columnName, row[columnName]))).ToString();

希望这有帮助。