After doing an XPath selection using .Net, using XmlDocument.SelectNodes(), it will return XMLNodeList class, sometimes we required to convert the XMLNodeList to Data Table for binding purposes. I couldn’t find a direct way, only way is using looping through the Nodes.
/// <summary>
/// Converts an XMLNodelist object to data table.
/// </summary>
/// <param name="xmlNodeList">The XMLNodeList to convert to DataTable.</param>
/// <param name="Columns">The columns required for the DataTable, using this parameter the
/// data will be fetched from xmlnodelist.</param>
/// <returns>DataTable with columns specified in the Columns parameter</returns>
public DataTable XmlNodeListToDataTable(XmlNodeList xmlNodeList, string[] Columns)
{
//Creating the DataTable.
using (DataTable dataTable = new DataTable("DataTable"))
{
//Adding data Table columns based on the columns parameter
foreach (string column in Columns)
{
dataTable.Columns.Add(column);
}
//Adding rows with values.
DataRow dataRow;
foreach (XmlNode node in xmlNodeList)
{
dataRow = dataTable.NewRow();
foreach (string column in Columns)
{
dataRow[column] = node.SelectSingleNode(column).InnerText;
}
dataTable.Rows.Add(dataRow);
}
return dataTable;
}
}
You can also create the columns dynamically, but you need to check for duplicate Data Columns.