In my current project, I am reading xml file into DataSet using System.IO.Stream.
There are hundred over records of child nodes inside parent node, NewDataSet
. I have attached XML schema below:
However, When I do counting of DataSet Tables, it returns only 1 table.
FileStream fileStream = new FileStream(sourceFilePath, FileMode.Open);
try
{
dataSet.ReadXml(fileStream);
if (dataSet.Tables.Count> 0)
{
//dt = dataSet.Tables[0];
for (int i = 0; i < dataSet.Tables.Count; i++)
{
dataTable = dataSet.Tables[i];
if (dataTable != null)
{
SalesHeader salesHeader = new SalesHeader();
salesHeader.OutletCode = dataTable.Rows[i]["OutletCode"].ToString();
salesHeader.TransactionNo = dataTable.Rows[i]["TransactionNo"].ToString();
salesHeader.TransactionDate = Convert.ToDateTime(dataTable.Rows[i]["TransactionDate"]);
salesHeader.ShiftNo = Convert.ToInt16(dataTable.Rows[i]["ShiftNo"]);
salesHeader.TotalAmount = Convert.ToDecimal(dataTable.Rows[i]["TotalAmount"]);
salesHeader.TenderAmount = Convert.ToDecimal(dataTable.Rows[i]["TenderAmount"]);
salesHeader.ChangeAmount = Convert.ToDecimal(dataTable.Rows[i]["ChangeAmount"]);
salesHeader.TransactionStatus = Convert.ToInt16(dataTable.Rows[i]["TransactionStatus"]);
salesHeader.BusinessDate = Convert.ToDateTime(dataTable.Rows[i]["BusinessDate"]);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
fileStream.Close();
}
I think that it is only reading the parent node and not able to reach the child nodes. Can anyone please tell me how to solve this problem? Any help will be very much appreciated!
I totally agree with Hamlet, your code works! You shouldn't iterate over the tables you should iterate over the rows in your Table:
FileStream fileStream = new FileStream(sourceFilePath, FileMode.Open);
try
{
List<SalesHeader> result = new List<SalesHeader>();
dataSet.ReadXml(fileStream);
if (dataSet.Tables.Count> 0)
{
dataTable = dataSet.Tables[0];
if (dataTable != null)
{
for (int i = 0; i < dataTable.Rows.Count; i++)
{
SalesHeader salesHeader = new SalesHeader();
salesHeader.OutletCode = dataTable.Rows[i]["OutletCode"].ToString();
salesHeader.TransactionNo = dataTable.Rows[i]["TransactionNo"].ToString();
salesHeader.TransactionDate = Convert.ToDateTime(dataTable.Rows[i]["TransactionDate"]);
salesHeader.ShiftNo = Convert.ToInt16(dataTable.Rows[i]["ShiftNo"]);
salesHeader.TotalAmount = Convert.ToDecimal(dataTable.Rows[i]["TotalAmount"]);
salesHeader.TenderAmount = Convert.ToDecimal(dataTable.Rows[i]["TenderAmount"]);
salesHeader.ChangeAmount = Convert.ToDecimal(dataTable.Rows[i]["ChangeAmount"]);
salesHeader.TransactionStatus = Convert.ToInt16(dataTable.Rows[i]["TransactionStatus"]);
salesHeader.BusinessDate = Convert.ToDateTime(dataTable.Rows[i]["BusinessDate"]);
result.Add(saleshaeder);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
fileStream.Close();
}