以下是我用于从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");
答案 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();
希望这有帮助。