Вы можете использовать класс XmlWriter для создания xml в соответствии с желаемой структурой.Вы можете оптимизировать код дальше, если заранее знаете, какие столбцы будет содержать таблица данных.
private void WriteDataTableToXml(DataTable dataTable, string xmlFilePath)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " ";
settings.NewLineOnAttributes = true;
using (StreamWriter streamWriter = new StreamWriter(xmlFilePath, false, Encoding.GetEncoding("ISO-8859-1")))
{
using (XmlWriter xmlWriter = XmlWriter.Create(streamWriter, settings))
{
xmlWriter.WriteStartElement("root");
xmlWriter.WriteStartElement("nodes");
foreach (DataRow dataRow in dataTable.Rows)
{
xmlWriter.WriteStartElement("node");
foreach (DataColumn dataColumn in dataTable.Columns)
{
xmlWriter.WriteElementString(dataColumn.ColumnName, dataRow[dataColumn].ToString());
}
xmlWriter.WriteEndElement();
}
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
}
}
}
Вызов этого метода будет выглядеть следующим образом:
string xmlFilePath = @"D:\test.xml";
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Col1");
dataTable.Columns.Add("Col2");
dataTable.Columns.Add("Col3");
dataTable.Rows.Add(1, "abc", "zyx");
dataTable.Rows.Add(2, "cde", "mno");
dataTable.Rows.Add(3, "def", "fru");
WriteDataTableToXml(dataTable, xmlFilePath);
И xmlБудет создано следующее:
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<nodes>
<node>
<Col1>1</Col1>
<Col2>abc</Col2>
<Col3>zyx</Col3>
</node>
<node>
<Col1>2</Col1>
<Col2>cde</Col2>
<Col3>mno</Col3>
</node>
<node>
<Col1>3</Col1>
<Col2>def</Col2>
<Col3>fru</Col3>
</node>
</nodes>
</root>