1

以下是我用来从 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");
4

1 回答 1

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 多列,因此我更新了代码以遍历列集合。我无法使用 LINQ,dt.Columns因为它没有实现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();

希望这可以帮助。

于 2013-10-08T10:23:41.927 回答